SQL最適化にはどのような方法がありますか?

王林
リリース: 2020-07-01 15:55:05
オリジナル
8793 人が閲覧しました

SQL 最適化方法: 1. [select *] の使用は避けてください。無駄なフィールドはクエリの効率を低下させます。2. in と not in の使用は避けてください。代わりに、とexists の間で選択できます。3. またはの使用は避けてください。 、代わりに結合を選択できます。

SQL最適化にはどのような方法がありますか?

SQL 最適化方法:

(推奨学習:mysql チュートリアル)

1. 作成テーブル内のインデックス。where および group by で使用されるフィールドを優先します。

2. select * の使用は避けてください。無駄なフィールドを返すと、クエリの効率が低下します。次のように:

SELECT * FROM t
ログイン後にコピー

最適化メソッド: * の代わりに特定のフィールドを使用し、使用されたフィールドのみを返します。

3. in と not in の使用は避けてください。データベース エンジンがインデックスを破棄し、テーブル全体のスキャンを実行することになります。

SELECT * FROM t WHERE id IN (2,3) SELECT * FROM t1 WHERE username IN (SELECT username FROM t2)
ログイン後にコピー

最適化方法:連続値の場合は between に置き換えることができます。次のようになります。

SELECT * FROM t WHERE id BETWEEN 2 AND 3
ログイン後にコピー

サブクエリの場合は、exists に置き換えることができます。次のように:

SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t2 WHERE t1.username = t2.username)
ログイン後にコピー

4. or の使用は避けてください。or を使用すると、データベース エンジンがインデックスを放棄してテーブル全体のスキャンを実行します。次のようになります。

SELECT * FROM t WHERE id = 1 OR id = 3
ログイン後にコピー

最適化方法: or の代わりに Union を使用できます。次のように:

SELECT * FROM t WHERE id = 1 UNION SELECT * FROM t WHERE id = 3
ログイン後にコピー

(追記: 例のように、 または の両側のフィールドが同じ場合。union がインデックスをスキャンする場合でも、2 つの方法はほぼ同じ効率であるようです。テーブル全体をスキャンします)

5. データベース エンジンがインデックスを破棄してテーブル全体のスキャンを実行する原因となる、フィールドの先頭でのファジー クエリを避けるようにしてください。次のように:

SELECT * FROM t WHERE username LIKE '%li%'
ログイン後にコピー

最適化方法: フィールドの後にファジー クエリを使用してみてください。次のように:

SELECT * FROM t WHERE username LIKE 'li%'
ログイン後にコピー

6. Null 値の判定は避けてください。null 値の判定を行うと、データベース エンジンがインデックスを破棄してテーブル全体のスキャンを実行することになります。

SELECT * FROM t WHERE score IS NULL
ログイン後にコピー

最適化方法: フィールドにデフォルト値の 0 を追加し、0 値を判定することができます。次のように:

SELECT * FROM t WHERE score = 0
ログイン後にコピー

7. where 条件の等号の左側で式や関数の操作を実行しないようにしてください。これにより、データベース エンジンがインデックスを破棄してテーブル全体のスキャンが実行されます。次のようになります。

SELECT * FROM t2 WHERE score/10 = 9 SELECT * FROM t2 WHERE SUBSTR(username,1,2) = 'li'
ログイン後にコピー

最適化方法: 式と関数の演算を等号の右側に移動できます。

SELECT * FROM t2 WHERE score = 10*9 SELECT * FROM t2 WHERE username LIKE 'li%'
ログイン後にコピー

8. データ量が多い場合は、1=1 の条件は避けてください。通常、クエリ条件の組み立てを容易にするために、この条件をデフォルトで使用し、データベース エンジンはインデックスを放棄してテーブル全体のスキャンを実行します。

SELECT * FROM t WHERE 1=1
ログイン後にコピー

最適化方法:SQL組み立て時にコードで判断し、whereがない場合はwhereを、whereがある場合はandを追加します。

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!