On 06/25/2014 04:44 PM, João Ramos wrote:
The sample column has some sensitive data that I can't share, so I'll have
to change it and then try to reproduce the problem (I removed it before
because I assumed that it wouldn't be important).
On Mon, Jun 23, 2014 at 3:26 PM, Dan Kennedy <danielk1...@gmail.com> wrote:
On 06/23/2014 05:48 AM, João Ramos wrote:
Here you go:
sqlite_stat1 (before - good planning)
HistoryEntry idx_HistoryEntry_uri_historyOrder 14992 44 5
HistoryEntry idx_HistoryEntry_historyOrder_historyTimestamp 14992 6 2
HistoryEntry idx_HistoryEntry_sourceType_sourceId 14992 2999 2
sqlite_stat1 (after - bad planning)
HistoryEntry idx_HistoryEntry_uri_historyOrder 15492 45 5
HistoryEntry idx_HistoryEntry_historyOrder_historyTimestamp 15492 5 2
HistoryEntry idx_HistoryEntry_sourceType_sourceId 15492 3099 2
The issue, it turned out, is in the sqlite_stat1 data. The first set of
stat1 data above suggests that using index
"idx_HistoryEntry_uri_historyOrder" for a (uri=? AND historyOrder=?)
lookup returns 5 rows. But using
"idx_HistoryEntry_historyOrder_historyTimestamp" for a (historyOrder=?)
lookup returns 6 rows. So in this case SQLite prefers the former.
But using the second set of sqlite_stat1 data, both lookups appear to
return 5 rows. Both strategies are considered equally good. So SQLite
just picks either. In this case, clearly it's making an unlucky choice.
Version 3.8.5 includes logic to prefer the (uri=? AND historyOrder=?)
lookup over the (historyOrder=?) one on the basis that it uses a
superset of the WHERE clause terms. Introduced here:
http://www.sqlite.org/src/info/683dd379a293b2f3
So upgrading to 3.8.5 might fix the problem.
Dan.
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users