IF the LIKE optimization applied where the LHS of the like operator were an 
expression, then the index on that expression would have to have the 
appropriate collation.  In otherwords for a case_insensitive_like (the default) 
the index would have to be collate nocase in order to be useable, and for 
case_sensitive_like the index would have to be collate binary in order to be 
useable.

You can test this out quite easily:

create table x (x text collate nocase unique);
create index xn1 on x ('Yahoo' || x collate nocase);
create index xn2 on x (('Yahoo' || x) collate nocase);
create index xb1 on x ('Yahoo' || x collate binary);
create index xb2 on x (('Yahoo' || x) collate binary);

insert into x values ('A'),('b'),('C'),('d');

.eqp on
select * from x where 'Yahoo' || x like 'yahooc';

and see what index is used.  My sqlite 3.30 uses index xn2 and will not use 
index xn1 if you drop index xn2 indicating the appropriate format to apply a 
collation to an index on an expression (that is that the collate operator binds 
more tightly than the || operator so therefore the expression must be in 
parenthesis.

If you turn on case_sensitive_like, then index xb2 is used for the case 
sensitive operation and will not use index xb1 even if index xb2 is deleted.


>-----Original Message-----
>From: sqlite-users <sqlite-users-boun...@mailinglists.sqlite.org> On
>Behalf Of Jens Alfke
>Sent: Friday, 27 September, 2019 15:09
>To: SQLite mailing list <sqlite-users@mailinglists.sqlite.org>
>Subject: [sqlite] LIKE optimization when the LHS is an indexed
>expression?
>
>I've been reading about the LIKE optimization[1]. One of the constraints
>on its use is:
>
>> if case_sensitive_like mode is enabled then the column must indexed
>using BINARY collating sequence, or if case_sensitive_like mode is
>disabled then the column must indexed using built-in NOCASE collating
>sequence.
>
>Does this also apply when the LHS is not a column but an expression? I.e.
>does the index on that expression need to have BINARY (or NOCASE)
>collation?
>
>—Jens
>
>[1]: https://sqlite.org/optoverview.html#the_like_optimization
>_______________________________________________
>sqlite-users mailing list
>sqlite-users@mailinglists.sqlite.org
>http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users



_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to