web-dev-qa-db-ja.com

mysqlのようなパフォーマンスの向上

ワイルドカードが含まれている場合、オペレーターのパフォーマンスのようなmysqlを高速化する方法はありますか?例えば。 '%test%'のように

20
user121196

クエリが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

27
Cal

さて、最も簡単な最適化は、定数プレフィックスを持つことです(例:"test%" の代わりに "%test"または"%test%")これにより、エンジンはインデックスを使用して検索スペースを絞り込むことができます。ただし、それがすべての状況で可能であるとは限りません。

前処理ステップにより、ワイルドカード検索が通常の等式検索または全文検索に変わる場合があります。ワイルドカード検索を最適化するよりも、ワイルドカード検索を必要としないようにデータを構造化する方法を見つけることで、より多くの利益を得ることができます。

5
Max Shawabkeh