2016-10-11 85 views
1

我有一個sqlite數據庫,我在我的C#項目中使用System.Data.SQLite。Sqlite數據庫給我警告

我的要求是:

SELECT d1.* FROM DYN_table as d1 INNER JOIN (SELECT id_bill, ordre_phase, type, MAX(valeur) maximum FROM DYN_table WHERE id_customer=347 AND type IN (1,5,2) GROUP BY id_bill, ordre_phase, type) as d2 ON d1.type = d2.type AND d1.valeur = d2.maximum AND d1.ordre_phase=d2.ordre_phase AND d1.id_bill=d2.id_bill WHERE d1.id_customer=347 AND d1.type IN (1,5,2) 

的要求是工作,但我有以下警告:

SQLite warning (284): automatic index on sqlite_sq_1E5A8EC0(id_bill) 

當我嘗試了我的請求使用「解釋QUERY PLAN」我看到的最後一步是:

SEARCH SUBQUERY 1 AS d2 USING AUTOMATIC COVERING INDEX (id_bill=? AND ordre_phase=? AND type=?) 

但是在這個表中有一個id_bill的索引,我有的所有索引: -Primary鍵:id_player,id_bill,ordre_phase,類型 型 -id_player -ordre_phase -id_competition

我試圖創建id_bill,ordre_phase和類型,但還是同樣的「使用自動覆蓋索引索引「在分析。

我錯過了什麼嗎?

回答

2

數據庫在子查詢d2的列id_bill上創建臨時索引。

除非您爲此子查詢顯式創建(臨時)表,否則不可能顯式創建此索引。

忽略警告。 如果您需要優化此查詢,請考慮重寫該查詢,以便不必使用如此複雜的子查詢進行連接,即可以使用subquery flattening