2016-10-11 27 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) 

要求が動作しているが、私は次の警告があります:私は最後のステップがある見る「クエリプランをEXPLAIN」を使用して私の要求をしようとすると

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

を:

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、 -ordre_phase -id_competition

-id_playerタイプ 型 は私がid_bill、ordre_phaseとタイプしてインデックスを作成しようとしましたが、まだ同じ「自動覆いを使用したしましたインデックス "を分析します。

何か不足していますか?

答えて

2

データベースでサブクエリd2の列id_billに一時索引が作成されます。

このサブクエリの(一時的な)テーブルを明示的に作成しない限り、このインデックスを明示的に作成することはできません。

警告を無視してください。 このクエリを最適化する必要がある場合は、このような複雑なサブクエリを使用して結合を行う必要がないように、つまりsubquery flatteningが可能なように書き直すことを検討してください。

関連する問題