我的SQL查詢性能有一個奇怪的問題。當我在使用運營商= LEFT JOIN查詢約需30.514分鐘秒,但如果與< AND>只需要1.717秒。這是通過查詢:SQLITE操作「=」與「< AND >」的性能差異comapare
-- data_filehash.size>4095 AND data_filehash.size<4097 || 1.717 seconds
SELECT files.*, data_filehash.*
FROM v_filesp AS files
LEFT JOIN data_filehash ON files.id = data_filehash.file AND data_filehash.size>4095 AND data_filehash.size<4097
WHERE data_filehash.file IS NULL
-- data_filehash.size=4096 || 30.515 minutes
SELECT files.*, data_filehash.*
FROM v_filesp AS files
LEFT JOIN data_filehash ON files.id = data_filehash.file AND data_filehash.size=4096
WHERE data_filehash.file IS NULL
結果總是相同的(33016記錄在我的數據庫中); v_filep是一個視圖;我在data_filehash.size,data_filehash.file和文件主鍵(v_filesp).id上有索引;
我認爲這是不正常的。也許我應該配置一些東西,否則我不明白。
有EXPLAIN查詢計劃這兩個查詢:
查詢王氏=(慢)
SEARCH TABLE files USING INDEX files_c_dup (c_dup=?)
SEARCH TABLE dirs USING INTEGER PRIMARY KEY (rowid=?)
SEARCH TABLE data_filehash USING INDEX index_size (size=?)
查詢與< AND>(快)
SEARCH TABLE files USING INDEX files_c_dup (c_dup=?)
SEARCH TABLE dirs USING INTEGER PRIMARY KEY (rowid=?)
SEARCH TABLE data_filehash USING INDEX index_file (file=?)
末步驟是不同的,但它意味着什麼。如何告訴db,她應該在第一個查詢中使用更好的算法?
顯示了兩個查詢[解釋查詢計劃](http://www.sqlite.org/eqp.html)輸出。 –
你可以發佈表的模式嗎?大小是否有索引? – chugadie