まえがき
今日、Web サイトが停止するという問題に遭遇しました。数分後には、タイミング スクリプトで SQL を見つけましたが、実行効率が非常に遅いです。DBA が または に変更することを提案したところ、効率が何百倍も向上しました。
シーンの説明
1 2 つのテーブル関連付けクエリ
2.テーブル 1 のデータ量は 100 万に近いです
3.テーブル 2 のデータ量は 900 万に近いです
4.クエリ条件のタイトル フィールドはインデックス化されていません
5.元のクエリ文
SELECT a.id as id FROM `table1`as a left join table2 as b on a.id=b.id WHERE b.title="衣服" or b.title="裤子" or b.title="帽子" limit 0,100
ログイン後にコピー
6.変換後のクエリ文
SELECT a.id as id FROM `table1`as a left join table2 as b on a.id=b.id WHERE b.title IN ("衣服","裤子","帽子") limit 0,100
ログイン後にコピー
変換後の効率
元のSQL実行時間は5秒ですが、変更後は5秒のみです。 0.01秒かかるor の効率は O(n) ですが、in の効率は O(logn) ですが、n が大きくなると効率の差がより顕著になります。
推奨学習: 「
mysql ビデオ チュートリアル」