2

MySQLを使用してより大きなデータベースを作成するのは初めてです。大きくなるので、クエリのパフォーマンスを向上させる必要があります。そこで、インデックスを調べました。これが私が学んだことなので、私は常に自動インクリメントされ、プライマリインデックスとして使用されるidという名前の列を作成します。

いくつか検索して読んだ後、私は索引付けについていくつかのことを理解したと思いますが、確かにしたいと思います。

インデックスは、テーブル全体を検索するのではなく、より小さな部分を検索するだけなので、たとえばWHERE句を使用してselectクエリを使用する場合に役立ちます。WHERE句とJOIN句で使用されているものにインデックスを付ける必要があります。

インデックスを作成する列のphpMyAdminにインデックスを追加するだけで十分ですか、それともselectクエリを実行するときに何かを行う必要がありますか?

4

3 に答える 3

2

SELECTステートメントに変更を加える必要はありません。MySQLは、可能な場合、ルックアップにインデックスを自動的に使用します。

そうです、phpMyAdminを介してインデックスを追加するだけで十分です。

これが実際に動作することを確認するには、インデックスを作成したら、プレフィックスがEXPLAINのSELECTクエリを実行してみてください。MySQLは、使用されているインデックスを教えてくれます。

于 2012-07-13T20:44:26.757 に答える
1

インデックスを追加するだけです。DBエンジンは、可能であればそれを使用します。DBエンジンがそれを使用しているかどうかを確認するexplainには、クエリの前にbeforeを追加すると、その機能が出力されます。例:

explain select * from your_table
于 2012-07-13T20:46:27.757 に答える
1

句でインデックスを使用できることは事実ですが、where検索するインデックスがわからず、代わりに名前、メールアドレス、日付などのより意味のあるデータを検索することがよくあります。

インデックスを使用することの力は、検索のパフォーマンスとデータベースのサイズの両方のためにテーブルを結合するときに得られます。従業員がいるDBがあり、従業員が所属するオフィスを追跡したい場合を想像してみてください。テーブルが1つしかない場合、各従業員はオフィス名を含む文字列、つまり「アルバカーキ本社」を持ちます。文字列は多くのスペースを占有し、検索に時間がかかります。

代わりに、2つのテーブルとインデックスを使用して設計されており、employee-tableは各従業員のint(他のテーブルのインデックス)を格納するだけで済みます。そして、2番目のテーブルはすべてのオフィスを追跡します。データレコードの数が増えると、データベース全体がはるかに小さくなります。このアプローチは、保守もはるかに簡単で、あらゆる点で優れています。

いずれにせよ、インデックスを間違えることは決してなく、作成する各テーブルにインデックスを追加することもできます(誰かがこのステートメントに同意しない可能性があると確信していますが、通常はそれを選択する必要があります)。

于 2012-07-13T20:50:01.890 に答える