On Thu, Dec 29, 2016 at 4:51 PM, Tomas Vondra <tomas.von...@2ndquadrant.com>
wrote:

> On 12/30/2016 12:46 AM, David G. Johnston wrote:
>
>> On Thu, Dec 29, 2016 at 4:38 PM, Tomas Vondra
>> <tomas.von...@2ndquadrant.com <mailto:tomas.von...@2ndquadrant.com
>> >>wrote:
>>
>>     On 12/30/2016 12:33 AM, David G. Johnston wrote:
>>
>>         On Thu, Dec 29, 2016 at 4:21 PM, Job <j...@colliniconsulting.it
>>         <mailto:j...@colliniconsulting.it>
>>         <mailto:j...@colliniconsulting.it
>>         <mailto:j...@colliniconsulting.it>>>wrote:
>>
>>             Hello,
>>
>>             in Postgresql 9.6 we have a query running on a very large
>> table
>>             based, in some cases, on a like statement:
>>
>>             ... WHERE FIELD='CODE' OR FIELD LIKE 'CODE_%'
>>
>>             Which type of index can i create to speed to the search when
>> the
>>             "like" case happens?
>>
>>
>>         ​GIST​
>>
>>         https://www.postgresql.org/docs/9.6/static/pgtrgm.html
>>         <https://www.postgresql.org/docs/9.6/static/pgtrgm.html>
>>
>>         ​https://www.postgresql.org/docs/9.6/static/btree-gist.html
>>         <https://www.postgresql.org/docs/9.6/static/btree-gist.html>
>>         ​
>>
>>
>>     For prefix queries, it's also possible to use simple btree index
>>     with varchar_pattern_ops.
>>
>>     https://www.postgresql.org/docs/9.6/static/indexes-opclass.html
>>     <https://www.postgresql.org/docs/9.6/static/indexes-opclass.html>
>>
>>
>> Even knowing that this feature exists I don't know that I could have
>> found it within a reasonable amount of time in its present location.  A
>> few cross-references from elsewhere (probably at least the functions
>> part of the documentation) would make learning about the capability a
>> lot easier.
>>
>>
> Well, it's referenced right from the "Indexes" part of the documentation
> (right at the beginning of "Index Types"):
>
> https://www.postgresql.org/docs/9.6/static/indexes.html
>
>
​While I may have an understanding of what operator classes and families
are when I am in my SQL thinking mode those terms don't really come to
mind.  Maybe part of the problem is that SQL doesn't have indexes and so my
formal education never covered them.  I learned how to use "CREATE INDEX"
to meet most common needs but the fact that I'm getting a b-tree family
index is well hidden.

While I'm all for learning the theory a more prescriptive approach (do this
to get an index that ​will allow prefix LIKEs to use it - see this section
for detail) to the topic would be welcome.  Tell the user how to use an
index when they are learning about the feature that they care about - LIKE
- not require them to learn all about indexes and later realize/remember
that one particular incantation will solve the LIKE problem.

David J.

Reply via email to