6

私は約300万行のテーブル(MySQL 5.1、InnoDB)を持っており、それらの98%は1つの単語のみで構成されています。を使用してクエリを実行している場合LIKE %searchterm%、速度が遅すぎます。

このテーブルのみのクエリがあるSELECTため、MyISAMに変換することを考えていました(InnoDBはまだサポートしていないか、5.6以降のバージョンのみをサポートしているためFULLTEXT)。

ただし、FULLTEXT-indexは分割された単語(「Hellosunny day」->「hello」、「sunny」、「日」)、つまり、列ごとに1語しかない場合、それは意味がありますか?

このテキスト列に通常のインデックスを配置すると、クエリが高速化されますか?

よろしくお願いします!

4

2 に答える 2

3

FULLTEXTインデックスを使用すると役立ちます。テキストを単語に分割しますが、それらの単語にもインデックスを付けます。クエリを高速化するのはこのインデックス作成です。ただし、インデックスを利用するには、LIKEではなく全文検索機能を使用する必要があります。

通常のインデックスは役に立ちません。LIKE句は、定数プレフィックスがある場合にのみインデックスを利用できます。

  • yourcolumn LIKE 'searchterm%'インデックスを使用します。
  • yourcolumn LIKE '%searchterm%'インデックスを使用しません。
于 2012-04-28T23:45:51.530 に答える
0

全文検索または全文索引はあなたに不利な点をもたらしますか?個人的には、「ByteArray」の「Array」など、単語の一部を検索できませんでした。

ここで紹介するアプローチを検討できます。

https://stackoverflow.com/a/22531268/543814

アイデアは、文字列のすべての可能なサフィックスを格納することです。

これには、文字列の長さに応じて、より多くのストレージが必要です。

代わりに、これらのクエリに通常のインデックスを使用することができます。文字列のすべての可能なサフィックスがテーブルにあるため、はと同じLIKE %searchterm%なります。LIKE searchterm%

先頭が不要になった%ため、通常のインデックスを再度使用できます。

于 2014-12-11T17:18:45.407 に答える