Hi there!

I noticed a heavy slow-down due to automatic indexes. Look at the following
output, where table "events" has 100k entries, and "tags" has ~10 entries:

SQLite version 3.7.4
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> .stats on
sqlite> .timer on
sqlite> SELECT events.rowid FROM tags, events WHERE tags.tag = "security"
AND tags.event_type = events.event_type limit 1;
1
Memory Used:                         2618712 (max 4011800) bytes
Number of Allocations:               2127 (max 3211)
Number of Pcache Overflow Bytes:     2543752 (max 3910408) bytes
Number of Scratch Overflow Bytes:    0 (max 8384) bytes
Largest Allocation:                  48000 bytes
Largest Pcache Allocation:           1272 bytes
Largest Scratch Allocation:          8384 bytes
Lookaside Slots Used:                7 (max 40)
Pager Heap Usage:                    2544416 bytes
Schema Heap Usage:                   3784 bytes
Statement Heap/Lookaside Usage:      2928 bytes
Fullscan Steps:                      5
Sort Operations:                     0
Autoindex Inserts:                   *99999*
CPU Time: user 0.220000 sys 0.010000
sqlite> pragma automatic_index = 0;
sqlite> SELECT events.rowid FROM tags, events WHERE tags.tag = "security"
AND tags.event_type = events.event_type limit 1;
1
Memory Used:                         2618488 (max 4011800) bytes
Number of Allocations:               2127 (max 3211)
Number of Pcache Overflow Bytes:     2543752 (max 3910408) bytes
Number of Scratch Overflow Bytes:    0 (max 8384) bytes
Largest Allocation:                  48000 bytes
Largest Pcache Allocation:           1272 bytes
Largest Scratch Allocation:          8384 bytes
Lookaside Slots Used:                4 (max 40)
Pager Heap Usage:                    2544416 bytes
Schema Heap Usage:                   3784 bytes
Statement Heap/Lookaside Usage:      2416 bytes
Fullscan Steps:                      5
Sort Operations:                     0
Autoindex Inserts:                   0
CPU Time: user 0.000000 sys 0.000000

Re-enabling autoindex yields again poor results with the same query.
I can work around it by adding "ORDER BY events.rowid" to the query.

Would SQLite "remember" the automatic query instead of creating 99999
temporary automatic indexes? Is this a bug or mis-use?
I can provide the database if necessary.

PS: Please CC me directly, my corporate firewall does not allow me to
register to the list (port 8080).

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

Reply via email to