Mysql はインデックスを使用するときに注意する必要があります: 1. カラムの NULL 値はインデックスに含まれません; 2. 文字列カラムのインデックスを作成するときは、プレフィックスの長さを指定する必要があります; 3. Mysql クエリのみインデックスを使用する; 4. 列に対して演算を実行しない; 5. NOT IN 演算を使用しない。
注:
(推奨チュートリアル: mysql チュートリアル)
1. インデックスは次のとおりです。 NULL 値を含む列ではありません
列に NULL 値が含まれている限り、それらはインデックスには含まれません。複合インデックスに NULL 値を含む列が存在する限り、この列はは、この複合インデックスでは無効になります。したがって、データベースを設計するときは、フィールドのデフォルト値を NULL にしないでください。
2. 短いインデックス
を使用して文字列のインデックスを作成します。可能であれば、プレフィックスの長さを指定する必要があります。たとえば、CHAR(255) 列がある場合、ほとんどの値が最初の 10 文字または 20 文字内で一意である場合は、列全体にインデックスを付けないでください。短いインデックスはクエリ速度を向上させるだけでなく、ディスク領域と I/O 操作を節約します。
3. インデックス列のソート
MySQL クエリはインデックスを 1 つだけ使用するため、インデックスが where 句で使用されている場合、順序付けされた列はインデックスを使用しません。したがって、データベースのデフォルトの並べ替えで要件を満たすことができる場合は、並べ替え操作を使用しないでください。複数の列の並べ替えを含めないようにしてください。必要に応じて、これらの列に対して複合インデックスを作成することをお勧めします。
4. like 文の操作
一般に like 操作の使用は推奨されていませんが、どうしても使用しなければならない場合には、どのように使用するかも問題になります。 「�a%」のようにインデックスは使用されませんが、「aaa%」のようにインデックスが使用されます。
5. 列に対して操作を実行しないでください。
は次のとおりです:
select * from users where YEAR(adddate)<2007;
は各行に対して操作を実行するため、インデックスが失敗し、テーブル全体が実行されます。スキャンするので、これを次のように変更できます:
次のように:
select * from users where adddate<‘2007-01-01';
6. NOT IN および <> 演算を使用しないでください
次の文インデックスを使用します:
SELECT * FROM mytable WHERE username like'admin%'
次の文では使用しません:
SELECT * FROM mytable WHEREt Name like'%admin'
関連する推奨事項: php training
以上がmysqlでインデックスを使用する際に注意すべき点は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。