17

私のプログラムでは、挿入がほとんどなく、頻繁に実行される挿入はすぐには必要ないため、に変更されていINSERT DELAYEDます。コードを調べて、句で参照されているフィールドを確認しWHERE、それぞれにインデックスを追加する必要がありますか?もしそうなら、どのタイプのインデックスを使用しますか?速度が低下するのはインサートだけですか?

また、これらのインデックスを任意のデータ型で使用できますか?

4

3 に答える 3

24

インデックス作成を検討できる主な場所は2つあります。WHERE句で参照される列とJOIN句で使用される列です。つまり、そのような列には、特定のレコードを検索するために必要なインデックスを付ける必要があります。

  • WHERE句とORDERBY句で必要な列のみにインデックスを付けます。豊富な列にインデックスを付けると、いくつかの欠点が生じます。
  • 索引付けを検討する列にはNOTNULL属性を使用して、NULL値が保管されないようにします。
  • --log-long-formatオプションを使用して、インデックスを使用していないクエリをログに記録します。このようにして、このログファイルを調べ、それに応じてクエリを調整できます。また、遅いクエリログ。
  • EXPLAINステートメントは、MySQLがクエリを実行する方法を明らかにするのに役立ちます。これは、テーブルがどのように、どのような順序で結合されるかを示しています。これは、最適化されたクエリの記述方法や、列にインデックスを付ける必要があるかどうかを判断するのに非常に役立ちます。

このブログはいいです。

于 2012-07-27T20:00:01.370 に答える
3

WHERE句で使用するフィールドには常にインデックスを追加する必要があります(SELECT、UPDATE、またはDELETEのいずれの場合でも)。インデックスのタイプは、フィールド内のデータのタイプと、各行に一意の値が必要かどうかによって異なります。一般に、デフォルトのインデックスタイプ(ハッシュとBツリー)は、実際に何をしているかを理解していない限り、デフォルト設定のままにしておくのが最適です。

現在、個別のインデックス(フィールドごとに1つ)を使用するか、複合インデックスを使用するかは、アプリケーションの動作に依存し、より高度な主題であるため、一般的に、始めたばかりの場合は、各フィールドのインデックスを使用してください。主キーには自動的にインデックスが付けられるため、それらに別のインデックスを作成する必要はありません。

于 2012-07-27T19:54:52.747 に答える
1

パフォーマンスの問題が発生する前にクエリを変更しないでください。これは時期尚早の最適化です。代わりに、MySQLクエリログを使用して、どのクエリに時間がかかっているかを確認し、それらのクエリの改善に集中してください。

于 2012-07-27T19:50:31.013 に答える