-1

users上の PRIMARY キーで呼び出されるテーブルが 1 つありますusers.zbid。ただし、そのSELECT上で実行されるすべてのクエリにはWHERE句が含まれcid='$cid' AND zbid='$zbid'ます。cidのインデックスまたは複数列のインデックスを追加する必要がありcid,zbidますか? WHEREの条項がそのままでは冗長に見えるcidことは承知していますが、主に予防措置としてあり、それぞれが異なるフォーラムを指定しており、何か問題が発生した場合に備えて、すべてのフォーラムに影響を与えたくありません。zbidPRIMARYcid

次に、 という別のテーブルがありますnotifications。このテーブルで実行される唯一のクエリは where 句を使用しcid='$cid' AND zbid='$zbid'ます。両方を個別のインデックスとして追加するか、1 つだけ追加する必要がありますか? なんで?

4

3 に答える 3

1
  1. に主キーがusers.zdibある場合、複合インデックスは必要ありません (mysql は に既存のインデックスを使用しますzdib) 。
  2. 最初のテーブルと同様の方法で を使用する場合cid、複合インデックスは必要ありません。 のインデックスだけで十分zdibです。それ以外の場合は、2 列にします。
于 2012-07-27T23:11:24.880 に答える
0

複数列インデックスの方がパフォーマンスが良いと思います。

cid,zbid には 1 回のシークが必要です

2 つのインデックスを持つには 2 つのシークが必要です

于 2012-07-27T22:57:03.010 に答える
0

最初のケースでは、MySQL は PRIMARY_KEY を使用します (他に AND があるかどうかは問題ではありません)。

2 番目のケースでは、それらの両方を 1 つのインデックスに追加する必要があります (列が一意でないと仮定します)。これにより、後でフィルタリングする結果が少なくなります。

また、カバリング インデックスも確認する必要があります。しかし、それらがあなたの場合に違いをもたらすとは思いません。

于 2012-07-27T23:13:42.357 に答える