7

次のようなテーブルを持つ MySQL データベース (バージョン 5.5.28) があります。

products (InnoDB)
-------------------------------------------------
search_id     title               description
1             Levi Blue Jeans     Some cool jeans 
2             Gucci Handbag       Great accessory
3             Prada Dress         Beautiful dress

MySQLで次のようなことをしたい:

SELECT MATCH(title) AGAINST ('Jeans') AS score, search_id, FROM search WHERE MATCH(title) AGAINST ('Jeans' IN BOOLEAN MODE)

私の知る限り、それは MyISAM でしかできません。次のようなことに頼らずに、InnoDBで同様の検索を行うことは可能ですか?

私のアプリケーション (約 1000 ~ 2000 レコード) では、Sphinx などはやり過ぎのようです。しかし、すべてのレコードを配列に入れ、それを PHP で検索するのも、多すぎるように思えます。しかし、多分あなたは同意しません。

PS。LIKE はうまく機能しないようです。通常、結果はそれほど正確ではなく、MATCH のようにスコアを取得することはできません。

4

1 に答える 1

13

テキスト列をproducts新しい MyISAM テーブルに複製します。2 つの間に 1 対 1 の関係を確立し、InnoDB によって提供される ACID'ity を確保するために、常に MyISAM テーブルに一緒にアクセスするようにしてくださいproducts

productsバイジェクションを維持するためにトリガーを追加することができます。また、ビューを作成して、MySQL v5.6 にアップグレードするときにアプリケーションの再作業が最小限になるようにすることもできます (そして、この複雑な回避策を削除します)。

これがフルモンティです。

テキスト列をコピーする代わりに、完全に移動できます (productsつまり、から削除します)。これはより効率的ですが、アップグレードしたいときに InnoDB のみのソリューションに切り替えるのが少し複雑になります。

于 2013-01-19T12:10:34.283 に答える