0

私は SQL クエリを書いていますが、何かがクエリで % 記号を利用しています。例:

SELECT * FROM TABLE A where state='NewYork%'

私の質問は、変数の位置で % を使用すると、MySQL のパフォーマンスにどのような影響がありますか? インデックスではどのように機能しますか?

Ex 1: SELECT * FROM TABLE A where state='NewYork%'

Ex 2: SELECT * FROM TABLE A where state='%NewYork'

Ex 3: SELECT * FROM TABLE A where state='%NewYork%'

Ex 4: SELECT * FROM TABLE A where state='New%York'
4

3 に答える 3

3

演算子を使用しない場合、他の文字と同じと見なされるLIKE可能性が高くなります。%

于 2012-06-12T15:24:41.737 に答える
1

foo LIKE 'abc%'クエリがまたはのように見える場合、MySQL はインデックスを使用できますfoo LIKE 'abc%def%'。最初のワイルドカードの前の任意の部分または文字列にインデックスを使用できます。文字列内の任意の単語に一致させる必要がある場合は、FULLTEXT代わりにインデックスを使用することを検討してください。

インデックスの詳細: http://dev.mysql.com/doc/refman/5.1/en/mysql-indexes.html

全文検索: http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

ここでいくつかのパフォーマンスのヒントをチェックしてください: http://forge.mysql.com/wiki/Top10SQLPerformanceTips

于 2012-06-12T15:26:07.377 に答える
0

私はあなたがLIKEを意味していると思います,

SELECT * FROM TABLE A where state like 'NewYork%'

Ex 1: SELECT * FROM TABLE A where state like 'NewYork%'

Ex 2: SELECT * FROM TABLE A where state like '%NewYork'

Ex 3: SELECT * FROM TABLE A where state like '%NewYork%'

Ex 4: SELECT * FROM TABLE A where state like 'New%York'

エンジンが MyIsam、Aria、または Innodb (mysql 5.6+) の場合、そのフィールドにフルテキスト インデックスを設定するのが最善の方法です。4つの'%'例で (ワイルドカード) について説明すると、次のようになります。

Ex 1: SELECT * FROM TABLE A where state like 'NewYork%'

Mysql には単語のリストがあり、.... で終わる単語や .... を持つ単語よりも、.... で始まる単語をすばやく特定できるためです。

于 2012-06-12T15:30:16.913 に答える