簡體   English   中英

如何優化SQLite3查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM