0

との 2 つの列を含むテーブルがありdteますid。これら 2 つを合わせて、一意のレコードを識別します。これら2つの列を使用して主キーを設定するか、次のように通常のインデックスを作成するだけで、アクセス時間に違いがありますか?

create index idx on mytable (dte, id)
create index idx2 on mytable (id)

これらの2つの列を持つ他のテーブルとの結合のアクセス時間に関して、特に答えを探しています。特に奇妙に思えるのはexplain、結合を行うときに、このペアリングが再び一意であるテーブルの 1 つで 15 行を調べる必要があることです。

4

1 に答える 1

0

つまり、 はprimary keyディスク上の行を識別します。他のインデックスには、主キーへのリンクが含まれています (少なくとも InnoDB では)。インデックスはメモリ内に存在し、欠落しているデータのために db エンジンをディスクに送信することになっています。クエリに必要なすべてのデータがインデックスに含まれている場合 (エンジンがディスク上に移動する必要がないように)、coveringクエリに対してインデックスが呼び出されます。

一度に両方の列で行を照合する場合 (または常に両方を出力する場合)、表示されている両方のインデックスがカバーされ、速度は比較的同じになります (選択性によって異なります)。

ただし、インデックス自体には RAM が必要です。InnoDB の場合、非主キーには主キーのコピーが含まれます。したがって、あなたのケースでは、2 番目のフィールドを主キーに含める方がよい場合があります。

これはすべて理論であり、実際にはあなたの問題を理解していません。

于 2012-08-13T10:56:12.783 に答える