Du Gu Nine SwordのSQLチューニング

最近、私が古いプロジェクトを移転しているときに、17歳のsqlに出会いました。これは怠惰な女性の足巻きのようなもので、臭くて長く、人々を混乱させました。痛みとは別に、彼は以下の経験もまとめました。
まず、単純化と単純化のために、要件を明確にする必要があります。この機能は正確に何をするのでしょうか。昨日出会った古いSQLはまだクエリステートメントであり、CPUを直接スクラップします。
次に、JavaコードはSQLと連携する必要があり、一部のロジックはJavaコードでの書き込みに適しており、一部はSQLでの書き込みに適しています。
最後に、SQL最適化のヒント。
1.インデックス。
全表スキャンは可能な限り回避する必要があります。最初に、whereとorder byに関係
する列インデックスを作成することを検討してくださいインデックスには、通常のBツリーインデックスと集計インデックスが含まれます。普通の索引はカタログの本のようなものですが、商品を探したい場合は、まずカタログから住所を探し、それから商品を探す必要があります。IOは2回実行されました。クラスター化インデックスは、マップのようにクエリの範囲を絞り込むためのものであり、ターゲット領域を見つけるためにマップを検索します。たとえば、通常のインデックスを使用する性別フィールド、100wのキーデータは、インデックスに50w回アクセスし、次にテーブルに50w回アクセスする必要があります。集計インデックスを使用するとクエリ速度が半分になる可能性がありますが、お勧めできません。
要約すると、インデックスは、多くの場合グループ化およびソートされ、多数の異なる値があり、頻繁に更新される列に追加する必要があります。
参照接続:
https : //blog.csdn.net/londa/article/details/95582041
2. where句のフィールドのnull値を判断しないようにし、!= Or <>演算子の使用を避け、orの使用を避けます同じフィールドの条件を接続する場合も、しない場合も、慎重に使用する必要があります。前に(つまり、最初に%で)ファジークエリを回避し、乗算や除算、スプライシングなどのフィールドに対する操作を回避します。これらの操作により、インデックスが失敗します。
3.クエリ条件フィールドで複合インデックスを使用する場合は、インデックスを使用する必要があります
引用符の最初のフィールドは、システムがインデックスを使用することを保証する条件として使用できます。フィールドの順序は、インデックスの順序と可能な限り一貫している必要があります。
4.意味のないクエリを避けてください。
5. inとnotの代わりに、existsとnot presentを使用します。
6. select *を使用せず、特定のフィールドを使用します。
7.テーブルを作成するときは、可変長フィールドの記憶域を小さくできるため、charではなくvarcharをできるだけ使用します。性別やステータスなど、1文字のみを格納するフィールドでは、文字タイプを数値タイプに置き換えて、メモリを節約します。
8.頻繁にアクセスされるデータをキャッシュします。

元の記事を6件公開 ・いい ね0 訪問数354

おすすめ

転載: blog.csdn.net/weixin_44863376/article/details/105026183