Search Postgresql Archives

Re: Partial index with regexp not working

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Richard Broersma Jr wrote:
--- Richard Huxton <dev@xxxxxxxxxxxx> wrote:
Phoenix Kiula wrote:
CREATE INDEX idx_trades_tid_partial ON trades (trader_id) WHERE
trader_id ~ '[a-z]' ; WHERE trader_id = 'johndoe'

It is not using this index at all! It is using no index in fact,
it's trying to do a sequential scan. Any ideas why this partial
index is not working??
A partial index will only be considered if you test for its
condition:

SELECT ... WHERE trader_id = 'johndoe' AND trader_id ~ '[a-z]'

IIRC, for any index like this to work, doesn't the REGEXP need to be
anchored to either the start or end of the string?

That's true if you are trying to match an expression to the index. For example:
  SELECT * FROM foo WHERE bar LIKE '%whatever%'
A btree index can't help here for the same reason you can't find someone in a phone-book by their first name.
  SELECT * FROM foo WHERE bar LIKE 'whatever%'
This *can* use an index, but only if you are in "C" locale or have set up text/varchar_pattern_ops appropriately. Then it gets converted into >= 'whatever' < 'whateves'.

Now in Phoenix's example the regexp is just being used to specify what values the index covers. A more common example might be:
  CREATE INDEX inv_unpaid_idx ON invoices (client_id) WHERE NOT paid;
This indexes client_id but only for those invoices that haven't been paid. Useful for a late-debtors report perhaps if you have lots of invoices but 99% have been paid already.

The planner isn't smart enough to figure out which queries can use this index by examining them, it just looks for (NOT paid) in the WHERE clause and if it doesn't find it, ignores the index.

--
  Richard Huxton
  Archonet Ltd

---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?

              http://archives.postgresql.org/

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux