[英]How to optimize an SQLite3 query
我正在通過一本書(“使用SQLite”)和Northwind數據庫學習SQLite3。 我編寫了以下代碼,按照其所在城市的客戶數量訂購客戶,然后按名稱按字母順序排列。
SELECT ContactName, Phone, City as originalCity
FROM Customers
ORDER BY (
SELECT count(*)
FROM Customers
WHERE city=originalCity)
DESC, ContactName ASC
運行大約需要50-100毫秒。 是否有一個標准的過程來優化這個查詢,或者更一般地說,它的類型的查詢?
在最常見的情況下,查詢優化從讀取查詢優化器的執行計划開始 。 在SQLite中,您只需使用
EXPLAIN QUERY PLAN statement
在你的情況下,
EXPLAIN QUERY PLAN
SELECT ContactName, Phone, City as originalCity
FROM Customers
ORDER BY (
SELECT count(*)
FROM Customers
WHERE city=originalCity)
DESC, ContactName ASC
您可能還需要閱讀輸出
EXPLAIN statement
進入更低層次的細節 。
通常(不僅僅是SQLite),最好一次對所有值(城市)進行計數,並使用連接來構造查詢:
SELECT ContactName, Phone, Customers.City as originalCity
FROM Customers
JOIN (SELECT city, count(*) cnt
FROM Customers
GROUP BY city) Customers_City_Count
ON Customers.city = Customers_City_Count.city
ORDER BY Customers_City_Count.cnt DESC, ContactName ASC
(為了防止,就像你的情況一樣,對於相同的值(城市)計算多次計數)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.