ドキュメントで読んだので興味がありました。書いていますか
select * from CONTACTS where id = ‘098’ and name like ‘Tom%’;
反対にクエリを高速化する
select * from CONTACTS where name like ‘Tom%’ and id = ‘098’;
1つ目は、左側にインデックス付きの列があります。それは実際に物事をスピードアップしますか、それとも迷信ですか?
phpとmysqlの使用
ドキュメントで読んだので興味がありました。書いていますか
select * from CONTACTS where id = ‘098’ and name like ‘Tom%’;
反対にクエリを高速化する
select * from CONTACTS where name like ‘Tom%’ and id = ‘098’;
1つ目は、左側にインデックス付きの列があります。それは実際に物事をスピードアップしますか、それとも迷信ですか?
phpとmysqlの使用
でクエリプランを確認しますexplain。それらはまったく同じである必要があります。
これは純粋に迷信です。どちらのクエリも速度が異なる理由はわかりません。ただし、ANDクエリではなくORクエリの場合は、左側に配置すると処理が高速化される可能性があることがわかりました。
興味深い質問です、私はこれを一度試しました。クエリプランは同じです(を使用EXPLAIN)。
しかし、短絡評価を考えると、なぜ違いがないのか(またはmysqlがブール式を完全に評価するのか?)
Like述語の文字列リテラルのどちら側にワイルドカードがあるかに関して、他の何かを覚えていなかったり、読み間違えたりしている可能性があります。右側にワイルドカードを配置すると(yrの例のように)、クエリエンジンは、検索しているテーブル列(この場合は-name)に存在する可能性のあるすべてのインデックスを使用できます。ただし、左側にワイルドカードを配置すると、
select * from CONTACTS where name like ‘%Tom’ and id = ‘098’;
その場合、エンジンは既存のインデックスを使用できず、完全なテーブルスキャンを実行する必要があります。