1
某些SELECT語句需要幾秒鐘才能返回數據,我想知道是否以及如何提高性能。數據庫通常很小(〜10-40MB),但數據量越大,需要的時間越長。 一個例子查詢這需要很長的是以下幾點:如何提高sqlite SELECT性能?
SELECT intf_id FROM interfaces
WHERE intfType IN (SELECT intfType FROM interfaces
WHERE intf_id=39151)
AND macAddress IN (SELECT l2_addr FROM neighbor
INNER JOIN nlink ON nlink.neighbor_neighbor_id=neighbor.neighbor_id
INNER JOIN interfaces ON interfaces.intf_id=nlink.interfaces_intf_id
WHERE interfaces.intf_id=39151)
AND status LIKE 'UP' AND phl=1 AND intf_id <> 39151
也許是因爲嵌套的SELECT語句的?
EXPLAIN查詢計劃CSV:
"0","0","0","SCAN TABLE interfaces USING COVERING INDEX ii1"
"0","0","0","EXECUTE LIST SUBQUERY 1"
"1","0","0","SEARCH TABLE interfaces USING INTEGER PRIMARY KEY (rowid=?)"
"0","0","0","EXECUTE LIST SUBQUERY 2"
"2","0","2","SEARCH TABLE interfaces USING INTEGER PRIMARY KEY (rowid=?)"
"2","1","0","SCAN TABLE neighbor"
"2","2","1","SEARCH TABLE nlink USING COVERING INDEX sqlite_autoindex_nlink_1 (neighbor_neighbor_id=? AND interfaces_intf_id=?)"
這個問題有點寬泛給出一個明確的答案。您可以開始運行'EXPLAIN QUERY PLAN'並查看查詢實際正在執行的操作。如果有太多的表掃描,你可能想要創建索引來加速它。 有關'EXPLAIN QUERY PLAN'的詳細信息,請參閱https://www.sqlite.org/eqp.html。 – Munir
編輯問題以顯示此查詢的'EXPLAIN QUERY PLAN'的輸出。或者更好,也可以創建一個最小的[SQL小提琴](http://sqlfiddle.com/#!5),以便其他人可以測試查詢。 –
謝謝你的提示。我將輸出添加到問題中。是否有任何選擇需要或輸出是否正常? – mspoerr