15

私は最近、sqliteでのインデックス作成の調査を開始しました。希望の列でインデックスを正常に作成できます。

これを行った後、データベースを調べて、インデックスが正常に作成されたことを確認しましたが、sqliteが各テーブルのインデックスをすでに自動作成していることがわかりました: "sqlite_autoindex_tablename_1"

これらの自動生成されたインデックスは、各テーブルの2つの列、つまり複合主キーを構成する2つの列を使用していました。これは、複合主キーを使用するときにsqliteが行う通常のことですか?

これらの2つの列に基づいてほとんどのクエリを実行するので、まったく同じものであるインデックスを手動で作成することは理にかなっていますか?

インデックスは初めてなので、サポート/フィードバック/ヒントなどに感謝します-ありがとうございます!

4

1 に答える 1

23

SQLiteでは、PRIMARY KEY制約を適用するためにインデックスが必要です。インデックスがないと、テーブルのサイズが大きくなるにつれて、制約の適用が大幅に遅くなります。制約とインデックスは同一ではありませんが、主キーを適用するためのインデックスを自動的に作成しないリレーショナルデータベースを知りません。そうです、これはどのリレーショナルデータベースでも正常な動作です。

インデックスを作成する目的が、インデックスの最初の列を含むインデックス可能な検索用語がある検索を最適化することである場合、列に追加のインデックスを作成する理由はありません-SQLiteは自動的に作成されたインデックスを使用します。

検索に最初の列のインデックス可能な用語を含めずにインデックスの2番目の列が含まれる場合は、インデックスを作成する必要があります。SQLite(または私が知っている他のリレーショナルデータベース)は、インデックスのヘッド列が検索で指定されていない場合、複合インデックスを使用してフィルタリングを最適化することはできません。

于 2013-01-29T20:26:53.663 に答える