SQL最適化のいくつかの方法

silencement
リリース: 2019-06-05 16:04:19
オリジナル
27252 人が閲覧しました

SQL最適化のいくつかの方法

1. クエリを最適化するには、テーブル全体のスキャンを避けるようにしてください。まず、where と order by に関係する列にインデックスを作成することを検討してください。

2. where 句内のフィールドで null 値の判断を行わないようにしてください。そうしないと、エンジンはインデックスの使用を断念し、次のようなテーブル全体のスキャンを実行します。 set on num デフォルト値は 0 です。テーブルの num 列に null 値がないことを確認してから、次のようにクエリを実行します:

select id from t where num is null
ログイン後にコピー

3。!= または < の使用は避けてください。 ;> 演算子を where 句に追加します。それ以外の場合、エンジンはインデックスの使用を断念し、テーブル全体のスキャンを実行します。


4. 条件を接続するために where 句で または を使用することは避けてください。そうしないと、エンジンはインデックスの使用を断念し、次のようなテーブル全体のスキャンを実行します。次のようにクエリできます。

select id from t where num=0
ログイン後にコピー

5.in と not in も注意して使用する必要があります。そうしないと、次のようなテーブル全体のスキャンが発生します。連続値を間で使用できる場合は、


select id from t where num=10 or num=20
ログイン後にコピー

6 では使用しないでください。次のクエリでもテーブル全体のスキャンが発生します:

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 &#39;%abc%&#39;
ログイン後にコピー


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)=&#39;abc&#39;--name以abc开头的id
ログイン後にコピー

以上がSQL最適化のいくつかの方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート