一般的なSQL最適化面接の質問

 

1.フィールドの使用によってwhere.groupに優先度を与えるために、テーブルにインデックス付け。

フィールドは、クエリの効率が低下しますので2.クエリは、あまりにも多くの無用を返します、選択*を使用しないようにしてください。専用フィールドに戻るには、*の代わりに特定のフィールドを使用する必要があります。

:3.など、条件がクエリのあいまい%のようにどこに左右を使用しないでください

SELECT * FROM t_order WHERE顧客LIKE '%張%'

これは、全表スキャンを与えるために、データベースエンジンのインデックスにつながります。

最適化:バックフィールドにあいまいクエリを使用しています。次のように:

SELECT * FROM t_order WHERE顧客張% 'LIKE

4.で使用しないでくださいといないで、全表スキャンになります。次のように:

SELECT * FROM t_order WHEREのid IN(2,3)

SELECT * FROM t_order1 WHERE顧客IN(t_order2から顧客を選択)

最適化:

次のように連続値のために間には、中に使用できません:SELECT * FROM AND ID 3 2との間t_order。

サブクエリのため、代わりに存在し使用することができます。次のように:SELECT * WHEREをt_order1 FROM(SELECT * = t2.customer t1.customer WHERE t_order2 FROM)が存在します

5.使用しないようにしてくださいまたは、全表スキャンになります。次のように:

SELECT * FROM t_order WHERE ID = 1またはID = 3

最適化:あなたは労働組合の代わりに、またはを使用することができます。次のように:

t_order ID = 1 SELECT * FROM

連合

t_order ID = 3 SELECT * FROM

6. WHERE句の式のフィールドの操作を実行しないようにしてください、それはまた、全表スキャンになります。以下のような:

ここでNUM / 2 = 100 t_orderからIDを選択

お読みください:

* 2 NUM = 100 t_orderからIDを選択

NULL値をしようとしない7.whereの判断で条件は、ヌルの判断は、全表スキャンになります。次のように:

スコアはNULL IS t_order SELECT * FROM

最適化:

、フィールドにデフォルト値を追加するには、デフォルト値の決意します。以下のような:

t_orderスコア= 0 SELECT * FROM

8.条件に表現を試みてはいけないところ。操作機能の等号の左側は、全表スキャンにつながります。次のように:

スコア/ 10 = 10 t_order2 SELECT * FROM

SELECT * FROM t_order2 WHERE SUBSTR(顧客、1,5)= '張'

最適化:

表情。等号の右側にある機能の動作。次のように:

スコア= 10 * 10 t_order2 SELECT * FROM

SELECT * FROM t_order2 WHERE顧客張% 'LIKE

9. 1 = 1の条件を使用しないでください

時には、開発プロセスでは、アセンブリのクエリを容易にするために、我々はこの条件を追加します、これは、全表スキャンが発生します。次のように:

t_order 1 = 1 SELECT * FROM

最適化:

コードは、SQLで組み立てられる場合、NOが印加コードによって決定され、ここで添加しました

MyBatisの場合の構文はMyBatisのところ、使用してください。

10.プログラムは、システムの同時実行性を向上させ、大規模なトランザクション操作を避けるために試してみてください。

インデックスが多すぎる11テーブルのインデックス数が6以上に最高ではない、あなたは、必要に応じてインデックスを使用していない列の構築を検討する必要があります。

おすすめ

転載: www.cnblogs.com/Nina-piaoye/p/11269431.html