SQL 最適化方法: 1. [select *] の使用は避けてください。無駄なフィールドはクエリの効率を低下させます。2. in と not in の使用は避けてください。代わりに、とexists の間で選択できます。3. またはの使用は避けてください。 、代わりに結合を選択できます。
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 サイトの他の関連記事を参照してください。