ワイルドカードが含まれている場合、オペレーターのパフォーマンスのようなmysqlを高速化する方法はありますか?例えば。 '%test%'のように
クエリがfoo LIKE 'abc%'
またはfoo LIKE 'abc%def%'
のように見える場合、MySQLはインデックスを使用できます。最初のワイルドカードの前の任意の部分または文字列のインデックスを使用できます。文字列内の任意の場所でWordを照合する必要がある場合は、代わりに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
さて、最も簡単な最適化は、定数プレフィックスを持つことです(例:"test%"
の代わりに "%test"
または"%test%"
)これにより、エンジンはインデックスを使用して検索スペースを絞り込むことができます。ただし、それがすべての状況で可能であるとは限りません。
前処理ステップにより、ワイルドカード検索が通常の等式検索または全文検索に変わる場合があります。ワイルドカード検索を最適化するよりも、ワイルドカード検索を必要としないようにデータを構造化する方法を見つけることで、より多くの利益を得ることができます。