sql単純最適化
2927 ワード
1、クエリーを最適化するには、できるだけ全表スキャンを避けるべきで、まず実際には、インデックスもプライマリ・キーとインデックス・フィールドを保存し、エンティティ・テーブルのレコードを指すテーブルです. インデックスの使用のメリットについては前述していますが、インデックスの使用が多すぎると乱用されます.したがって、インデックスはクエリの速度を大幅に向上させると同時に、テーブルに対して インデックスを作成すると、ディスク領域を占有するインデックスファイルが作成されます.だから慎重に. 1つのテーブルのインデックス数は6つを超えないことが望ましいが、多すぎる場合は すべてのインデックスがクエリーに有効であるわけではありません.SQLはテーブルのデータに基づいてクエリーの最適化を行います.インデックス列に大量のデータが重複している場合、SQLクエリーはインデックスを利用しない可能性があります.例えば、テーブルにフィールドsexがあり、male、femaleがほぼ半分ずつある場合、sexにインデックスを作成してもクエリーの効率には役立ちません.
2、できるだけ
numにデフォルト値0を設定して、テーブルのnum列にnull値がないことを確認し、クエリーを実行できます.
3、できるだけ
次のように問い合わせることができます.
ps:しかし、本人のクエリーの結果、時間がかかってもあまり差はありません.本人のデータベースのデータ量が足りない原因かもしれません.の
4、フィールドタイプの使用方法できるだけ数値フィールドを使用し、数値情報のみを含むフィールドをできるだけ文字型に設計しないと、クエリーと接続のパフォーマンスが低下し、ストレージのオーバーヘッドが増加します.これは、クエリと接続を処理するときに、エンジンが文字列の各文字を1つずつ比較し、数値型では1回だけ比較すればよいためです. 可能な限り
5、どこでも
where
およびorder by
に関連する列にインデックスを確立することを考慮しなければならない.INSERT
、UPDATE
およびDELETE
を行うなど、テーブルの更新速度を低下させるという欠点もあります.表を更新するとき、MySQLはデータを保存するだけでなく、インデックスファイルも保存します.
からのカラムに作成されたインデックスが必要かどうかを考慮しなければならない.2、できるだけ
をwhere
句の中でフィールドに対してnull
を行うべきで、さもなくばエンジンがインデックスの使用を放棄して全表スキャンを行うことになる.select id from t where num is null
numにデフォルト値0を設定して、テーブルのnum列にnull値がないことを確認し、クエリーを実行できます.
select id from t where num=0
3、できるだけ
をwhere
句に!=
または<>
オペレータを使用しなければならない.そうしないと、エンジンはインデックスの使用を放棄して全表スキャンを行う.SELECT id FROM article WHERE type_name='2' OR type_name='3';
次のように問い合わせることができます.
SELECT id FROM article WHERE type_name='2'
UNION ALL
SELECT id FROM article WHERE type_name='3';
ps:しかし、本人のクエリーの結果、時間がかかってもあまり差はありません.本人のデータベースのデータ量が足りない原因かもしれません.の
4、フィールドタイプの使用方法
varchar
を使用します.char
の代わりに、まずフィールドの記憶領域が小さくなるため、記憶領域を節約することができます.次に、クエリーにとって、比較的小さなフィールド内での検索効率は明らかに高くなります.5、どこでも
select * from t
を使用しないで、“*”
の代わりに具体的なフィールドリストを使用して、使用できないフィールドを返さないでください.