2017-07-05 13 views
0

が、私はのようなデータを含むデータベースの行のセットを持っていると言う:MySQLのLIKE、パフォーマンス上の余分なワイルドカードの効果

  • Blah1-Blah2-Blah3
  • Blah1-Blah3-Blah2

う"Blah1-%"を使用するLIKEクエリは、 "Blah1 - % - %"を使用するクエリより速く/遅くなります。明らかに私の例では、両方の行を取得しますが、うまくいけば、私はどこから来ていますか。文字列に含まれているすべての情報をクエリに含めるか、できるかぎり情報を省略する方がよいでしょう。

私の思考は、より多くの情報がクエリに含まれている場合、インデックスがより活用される可能性があります。私はデータベースに関して多少の経験を積んできましたが、技術的なレベルでキーが何をしているかを頭に浮かべていませんでした。これは知っている誰かに愚かな質問かもしれません!

+0

ここでフリーテキストフィールドを話していますか? – jimmy8ball

+0

はい、あります!このタイプの検索のためにデータを保存するより良い方法があるのですが...? –

+0

このフィールドに入る値がフリーテキストの場合、インデックスは実際には役に立ちませんが、言い換えると文字列内のどこかの値をテストすると、クエリのオプティマイザで文字列の比較が重くなります文字列の先頭をテストします。 - 可能であれば、索引付けできる選択可能な値のリストを事前に作成することをお勧めします。 – jimmy8ball

答えて

0

"Blah1-%-%"は、"Blah1-foo"が見つかりませんでしたが、もう1つはありません。それ以外に、...

特に、ディスクから赤色にする必要がある場合は、その行をフェッチして解析します。追加のワイルドカードを含むLIKEを含むすべての式のコストは軽微です。

すべてオプティマイザは、LIKEでワイルドカードで始まるかどうか(インデックスを許可しないかどうか)を決定します(オプティマイザはインデックスを考慮します)。

関連する問題