Any comments on this - Richard or Dan? Hugh
> This appears to be the same as > http://www.sqlite.org/cvstrac/tktview?tn=1893 > > I've attached a comment there. > > This is quite a big trap which I only found when loading up the > database with a lot of data. What's the timescale for fixing the bug? > > I will have to bypass the AUTOINCREMENT functionality and create my > own IDs. That creates more complications. > > Hugh > > > *Subject:* Problems using AUTOINCREMENT row IDs in indexes > > *From:* "Hugh Gibson" <[EMAIL PROTECTED]> > > *To:* sqlite-users@sqlite.org > > *CC:* [EMAIL PROTECTED] > > *Date:* Thu, 13 Nov 2008 14:56 +0000 (GMT Standard Time) > > > > I'm having problems getting good index choice in SQLite 3.6.4 for > > a field > > which is INTEGER PRIMARY KEY AUTOINCREMENT. > > > > I've got the following table: > > > > CREATE TABLE Signals (sSignalID Text DEFAULT '',sText Text DEFAULT > > '',sTime Text DEFAULT '',sUserID Text DEFAULT '',nRowID INTEGER > > PRIMARY > > KEY AUTOINCREMENT DEFAULT '0'); > > > > with index: > > > > CREATE UNIQUE INDEX idxUserID ON Signals (sUserID, nRowID); > > > > In my test cases I've got around 2 million records in the table, > > with > > only 6 or so sUserID values. In practice there will be thousands > > of > > distinct sUserID values. > > > > This query: > > > > SELECT * FROM Signals WHERE sUserID='[EMAIL PROTECTED]' AND nRowID >= > > 1932308 > > and nRowID <= 1932508 > > > > takes 380 ms to execute. > > > > If I do this: > > > > ALTER TABLE Signals ADD COLUMN nRowID2 INTEGER > > UPDATE Signals SET nRowID2 = nRowID > > CREATE UNIQUE INDEX idxUserID2 ON Signals (sUserID, nRowID2); > > > > and run this: > > > > SELECT * FROM Signals WHERE sUserID='[EMAIL PROTECTED]' AND nRowID2 >= > > 1932308 and nRowID2 <= 1932508 > > > > it takes 1 ms. > > > > I get similar results for this sort of query - a dramatic speedup > > when > > using the clone field nRowID2: > > > > SELECT * FROM Signals WHERE sUserID='[EMAIL PROTECTED]' AND nRowID < > > 1000000 > > ORDER BY nRowID DESC LIMIT 100 > > > > Looking at the query plans it appears that the nRowID queries > > aren't > > exploiting the fact that nRowID is in the index idxUserID. That > > index is > > used, but there is no seek using the nRowID as well as the > > sUserID. > > > > > > Why should the fact that the nRowID field is INTEGER PRIMARY KEY > > AUTOINCREMENT prevent it from being used properly in query index > > selection? How can I get AUTOINCREMENT behaviour as well as good > > index > > selection? Is this an SQLite bug? _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users