2012-09-12 85 views
0

我有一個SQLite表作爲如何優化SQLite的索引查詢

CREATE TABLE T(
    CategoryCode NVARCHAR(64) NOT NULL, 
    DateTime  DateTime NOT NULL, 
    ItemCode  NVARCHAR(64) NOT NULL, 
    ItemName  NVARCHAR(64) NOT NULL, 
    ItemValue NUMERIC(28, 4) NOT NULL 
) 

的問題是,如何優化索引以下查詢:

SELECT 
CategoryCode 
,ItemCode 
,ItemName 
,SUM(ItemValue) as TotalValue 
FROM T 
WHERE CategoryCode = 'Code1' 
AND DateTime < '2012-01-04 00:00:00' 
GROUP BY ItemCode 

謝謝!

回答

2

對於確切的查詢,您需要T(CategoryCode, DateTime)T(DateTime, CategoryCode)上的索引,具體取決於哪一列比另一列更有選擇性。

但是,如果沒有對錶的所有訪問權限進行更全面的查看,爲單個查詢創建索引是不明智的。

例如例如,您可能會發現,如果表中的大部分數據都有CategoryCode = 'Code1',則只應在DateTime列上創建索引。

+0

除非在最新版本的sqlite中有所改變,否則查詢計劃將首先檢查「CategoryCode」。如果你沒有將它包含在索引中,我相信你會在看錶掃描。 –