2

LIKE静的句要素を使用して句の使用を最適化できるかどうかに興味があります。

これはクエリですか

(SELECT * FROM n where n.name = 'x' AND n.body LIKE '%x%';)

これより速い

(SELECT * FROM n WHERE n.body LIKE '%x%';)

私はmysqlを使用しています。

4

2 に答える 2

8

EXPLAINどのクエリがより高速かを知るために使用できます。

一般的な概念として、クエリよりも静的クエリを使用することをお勧めしLIKEます。そのため、いくつか追加すると速くなります。

LIKEただし、静的クエリが使用するインデックスの行を実際に減らす場合に限ります。

原則として、LIKEスタイル クエリは (フィールドの内容をスキャンする必要がある他のクエリと一緒に) コストがかかるということです。( のcost列を参照してくださいEXPLAIN) したがって、クエリで処理する必要がある行の量を減らすとLIKE、クエリが高速になります。

どのような状況でどのクエリを高速化するのかは、一般的に答えにくいものです。EXPLAIN実際の回答を得るには、具体的な状況 (DBMS、テーブル モデル、インデックス、データ量、呼び出しの結果など) の説明を含む正確な質問をする必要があります。

于 2013-06-24T18:47:07.843 に答える
2

にインデックスがある場合は、より高速になる可能性がありますn.name。列で使用可能な場合、MySQL は常にインデックスを使用すると思います。数行しかない場合n.name = 'x'、エンジンはそれらの行を選択し、それらに対してlikeのみ操作を実行します。

like両側にワイルドカードがあるため、インデックスを利用できません。

インデックスがない場合、比較を追加すると、クエリにごくわずかなオーバーヘッドが追加されますが、like. どちらが支配的な要因になるかは不明ですが、ディスクからのデータの読み取りがクエリを支配する可能性があります。

于 2013-06-24T18:49:03.680 に答える