LIKE
静的句要素を使用して句の使用を最適化できるかどうかに興味があります。
これはクエリですか
(SELECT * FROM n where n.name = 'x' AND n.body LIKE '%x%';)
これより速い
(SELECT * FROM n WHERE n.body LIKE '%x%';)
私はmysqlを使用しています。
LIKE
静的句要素を使用して句の使用を最適化できるかどうかに興味があります。
これはクエリですか
(SELECT * FROM n where n.name = 'x' AND n.body LIKE '%x%';)
これより速い
(SELECT * FROM n WHERE n.body LIKE '%x%';)
私はmysqlを使用しています。
EXPLAIN
どのクエリがより高速かを知るために使用できます。
一般的な概念として、クエリよりも静的クエリを使用することをお勧めしLIKE
ます。そのため、いくつか追加すると速くなります。
LIKE
ただし、静的クエリが使用するインデックスの行を実際に減らす場合に限ります。
原則として、LIKE
スタイル クエリは (フィールドの内容をスキャンする必要がある他のクエリと一緒に) コストがかかるということです。( のcost
列を参照してくださいEXPLAIN
) したがって、クエリで処理する必要がある行の量を減らすとLIKE
、クエリが高速になります。
どのような状況でどのクエリを高速化するのかは、一般的に答えにくいものです。EXPLAIN
実際の回答を得るには、具体的な状況 (DBMS、テーブル モデル、インデックス、データ量、呼び出しの結果など) の説明を含む正確な質問をする必要があります。
にインデックスがある場合は、より高速になる可能性がありますn.name
。列で使用可能な場合、MySQL は常にインデックスを使用すると思います。数行しかない場合n.name = 'x'
、エンジンはそれらの行を選択し、それらに対してlike
のみ操作を実行します。
like
両側にワイルドカードがあるため、インデックスを利用できません。
インデックスがない場合、比較を追加すると、クエリにごくわずかなオーバーヘッドが追加されますが、like
. どちらが支配的な要因になるかは不明ですが、ディスクからのデータの読み取りがクエリを支配する可能性があります。