1. クエリを最適化するには、テーブル全体のスキャンを避けるようにしてください。まず、where と order by に関係する列にインデックスを作成することを検討してください。
2. where 句内のフィールドで null 値の判断を行わないようにしてください。そうしないと、エンジンはインデックスの使用を断念し、次のようなテーブル全体のスキャンを実行します。 set on num デフォルト値は 0 です。テーブルの num 列に null 値がないことを確認してから、次のようにクエリを実行します:
select id from t where num is null
4. 条件を接続するために where 句で または を使用することは避けてください。そうしないと、エンジンはインデックスの使用を断念し、次のようなテーブル全体のスキャンを実行します。次のようにクエリできます。
select id from t where num=0
select id from t where num=10 or num=20
select id from t where num=10 union all select id from t where num=20
7。 where 句内のフィールドに対する式操作を回避するためです。これにより、エンジンがインデックスの使用を断念し、テーブル全体のスキャンが実行されます。例:
select id from t where num in(1,2,3)
を
select id from t where num between 1 and 3
8 に変更する必要があります。where 句内のフィールドに対して関数演算を実行しないようにしてください。インデックスを使用してテーブル全体のスキャンを実行します。例:
select id from t where name like '%abc%'
を
select id from t where num/2=100
9 に変更する必要があります。「=」の左側で関数、算術演算、その他の式演算を実行しないでください。そうしないと、システムがインデックスを正しく使用できない可能性があります。
10. インデックス フィールドを条件として使用する場合、インデックスが複合インデックスの場合、システムが確実にインデックスを使用するようにインデックスの最初のフィールドを条件として使用する必要があります。
11. 意味のないクエリは書かないでください。たとえば、空のテーブル構造を生成する必要がある場合:
select id from t where num=100*2
このタイプのコードは結果セットを返しませんが、結果セットを消費します。システム リソースを変更する必要があります。次のように:
select id from t where substring(name,1,3)='abc'--name以abc开头的id
以上がSQL最適化のいくつかの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。