6

60 列のテーブルがあるとします。そのテーブルであらゆる種類のクエリを実行する必要があり、そのテーブルを他のテーブルと結合する必要があります。そして、他のテーブルを含むそのテーブルのデータを検索するために、ほとんどすべての行を使用しています。このテーブルは、データベースの主テーブル (主キーのようなもの) のようなものです。したがって、すべてのテーブルはこのテーブルと関連しています。上記のシナリオを考慮して、テーブルの各列 (60 列) にインデックスを作成できますか?

一文で:

Is it best practice to create index on each column in a table ?
What might happens if I create index on each column in a table?

インデックスは「主キー」、「一意のキー」、または「インデックス」の場合があります

この質問が不明な場合は、コメントしてください。この質問を改善しようとします。

4

4 に答える 4

9

MySQL のドキュメントWHEREはこれについてかなり明確です (要約すると、 、JOIN、および集計関数で使用する列にインデックスを使用します)。

したがって、60 列であっても、テーブル内のすべての列にインデックスを作成することに本質的に問題はありません。インデックスが多いほど挿入が遅くなり、MySQL がキーを作成する必要があるため、いくつかの更新が行われますが、インデックスを作成しない場合、比較と結合でインデックスのない列のみが使用されている場合、MySQL はテーブル全体をスキャンする必要があります。

私はあなたがそうすることに驚いていると言わなければなりません

  1. 60 列のテーブルを用意する
  2. 同じテーブル内の他の列に依存せずに、これらの列をすべてJOINor句で使用するWHERE

…が、それは別問題です。

于 2013-04-18T05:53:08.733 に答える
3

テーブルの各列にインデックスを作成することはベスト プラクティスではありません。

インデックスは、列が where 句で使用されている場合に、クエリのパフォーマンスを向上させるために最も一般的に使用されます。

このクエリを頻繁に使用するとします。

select * from tablewith60cols where col10 = 'xx';

その場合、col10 にインデックスがあると便利です。

主キーにはデフォルトでインデックスがあることに注意してください。そのため、テーブルを他のテーブルと結合するときは、主キーを使用して結合する必要があります。

于 2013-04-18T06:01:01.500 に答える
2

インデックスを追加するということは、データベースがそれを維持する必要があることを意味します。つまり、更新する必要があることを意味します。したがって、書き込みが多ければ多いほど、インデックスが更新されます。

箱から出してインデックスを作成することはお勧めできません。必要な場合にのみインデックスを作成します (または、将来必要になると思われる場合...それが非常に明白な場合にのみ)。

于 2013-04-18T05:58:18.653 に答える