Re: [sqlite] Re: case insensitivity

2006-11-28 Thread Dixon Hutchinson

Igor, Dennis, Richard

Sorry, meant to include a reference to 'p' in my select:
 SELECT * FROM foo WHERE bar LIKE 'something' AND p='some_int';

But that raises the question of the order of the columns within 
UNIQUE().  Should I put the most "unique" column first, or the thing 
most easily compared on (ie the integer), or ...  What is the common 
wisdom (that I obviously don't have  ;-) ) here.  And does using "bar 
TEXT" vs "bar TEXT COLLATE NOCASE" affect the answer.  There probably 
are not easy answers here as the answer may depend on the character of 
the data in the table.


My own testing says that in the originally posed case, using "COLLATE 
NOCASE" is just a titch faster than using LIKE.


D


Igor Tandetnik wrote:

Dixon Hutchinson
 wrote:

I have an SQLite db with one TEXT column.  That column and an INTEGER
column (not the rowid as this column is definitely not unique by
itself) are declared UNIQUE together.

CREATE TABLE foo (
   bar TEXT,
   p  INTEGER,
   rowid INTEGER PRIMARY KEY AUTOINCREMENT, -- I know... this is
implicit...
   UNIQUE(p, bar)
);

All of my searches of the db when searching by the TEXT column must be
case insensitive.  So I have been using: SELECT * FROM foo WHERE bar
LIKE 'some text here';

Is that better, worse, or no different than using a "COLLATE NOCASE"
qualifier on the TEXT column and changing the "LIKE" to "="


Equality test is probably going to be somewhat faster than LIKE test 
in any case, but don't expect any dramatic time savings. Since your 
query does not use p, and p is the first field in the index, the index 
will not be used whether you use = or LIKE. If the statement you show 
is a common one and you are concerned about its performance, put 
COLLATE NOCASE on the bar column and also change the constraint to 
UNIQUE(bar, p) (or else create a separate index on bar).


Igor Tandetnik

- 


To unsubscribe, send email to [EMAIL PROTECTED]
- 





-
To unsubscribe, send email to [EMAIL PROTECTED]
-



[sqlite] Re: case insensitivity

2006-11-28 Thread Igor Tandetnik

Dixon Hutchinson
 wrote:

I have an SQLite db with one TEXT column.  That column and an INTEGER
column (not the rowid as this column is definitely not unique by
itself) are declared UNIQUE together.

CREATE TABLE foo (
   bar TEXT,
   p  INTEGER,
   rowid INTEGER PRIMARY KEY AUTOINCREMENT, -- I know... this is
implicit...
   UNIQUE(p, bar)
);

All of my searches of the db when searching by the TEXT column must be
case insensitive.  So I have been using: SELECT * FROM foo WHERE bar
LIKE 'some text here';

Is that better, worse, or no different than using a "COLLATE NOCASE"
qualifier on the TEXT column and changing the "LIKE" to "="


Equality test is probably going to be somewhat faster than LIKE test in 
any case, but don't expect any dramatic time savings. Since your query 
does not use p, and p is the first field in the index, the index will 
not be used whether you use = or LIKE. If the statement you show is a 
common one and you are concerned about its performance, put COLLATE 
NOCASE on the bar column and also change the constraint to UNIQUE(bar, 
p) (or else create a separate index on bar).


Igor Tandetnik 



-
To unsubscribe, send email to [EMAIL PROTECTED]
-