2011-11-08 12 views
5

ちょうど質問です。私のウェブサイトはかなり遅くなりました。 30k行で30秒以上かかるロード時間。私はクエリが最適化されていないと言わなければならないので、10kクエリが実行される可能性がありますが、それでも時間がかかることがわかりました...だから、インデックスを確認してみましょう。いくつかの '問題'テーブルを表示した後、私は複数の列にインデックスを作成しましたが、カーディナリティは1列のみに表示され、他のインデックスは0カーディナリティを持ちます。MySQLはどのようにインデックスを格納しますか?

私は間違ったインデックスを作成しましたか?言い換えれば、私はそれらを組み合わせるのではなく、各列のインデックスを作成する必要がありますか?

+2

これらのフィールドはすべて同じ値を持っていますか? – GolezTrol

+0

問題が発生しているクエリを見つけるために低速ログを有効にし、EXPLAINで実行して結果をここにまたは新しい質問に投稿する必要があります。 – hafichuk

+0

いいえ、1フィールドのみです。このスクリーンショットを例としてご覧ください:http://imageshack.us/f/812/schermafbeelding2011110kj.png/これは、現時点で35.721行を含む予約テーブルです。 – Ben

答えて

3

間違ったインデックスを作成したことはほぼ間違いありません。ほとんどの人はやる! :-)

複数の列と個々の列に対してインデックスを作成するルールはありません。最適な索引は、データベース・スキーマではなく、実行する照会によって異なります。

クエリの分析とインデックスの決定は細心の注意を払って行います。 EXPLAINを使用すると、特定のクエリが既存のインデックスをどのように使用しているかを確認できます。ドキュメントを必ずお読みください:

+0

返事をありがとう。私は、テーブルからデータをフィルタリングするために最もよく使用されるカラムのインデックスを作成する必要があることを知っています。スクリーンショット(開始ポストのコメントを参照)の列が最も使用されます。リンクにも感謝しますが、私はEXPLAIN構文を使い慣れています。 :) – Ben