2012-01-05 14 views
8

私は現在、私のPHPプロジェクトのための高度な検索を提供するための最良の方法の研究をやっています。MySQLの検索 - 全文検索のためのMyISAM対のInnoDBとの取引

私は、全文検索を使用するのではなく、テーブルの行に一致する文字列を検索するLIKEを使用して、それを絞られています。しかし、これを行うには、InnoDBエンジンを使用して犠牲にする必要があります。これにより、トランザクションとテーブルの関係のACIDityが失われてしまいます。

はそれが本当に価値MYISAMのMySQLのエンジンを使用するか、検索機能を提供するより良い方法があるです。

何か指摘したいと思います!

答えて

7

それは本当に、参照整合性が失敗の瞬間である必要があります何のためにMyISAMテーブルを使用して...アプリケーションに依存します。それと同時に、それはテキスト検索はすべてその効率的ではありません。

基本的に2つの方法があります。本当の参照整合性が必要ない場合は、NoSQLデータストアを検討してください。 MongoDBは素晴らしいドキュメントストアデータベースです。

一方、参照整合性が本当に必要であるだけでなく、高速のインデックス付きフルテキスト検索が必要な場合は、SphinxまたはApache Solrを使用してフルテキスト検索のインデックス付きキャッシュを作成する方がよい場合があります。

いずれかの方法で、私は、MyISAMテーブルがレガシーデータストアであると考えています。私は新しいプロジェクトには使用しません。 YMMV。トランザクションサポートの欠如、重い読み取り+書き込み負荷型で、それは非常に遅くなり、テーブルレベルのロック -

+4

スティックと性能がhttp://stackoverflow.com/questions/4732067/complex-query-for-recreating-fulltextをスフィンクスに切り替えた場合に問題になるまでこのような何かを:参照してください。 -search-effect-on-innodb/4732982#4732982。 myisamがよりよく読まれていると思うなら、http://stackoverflow.com/questions/4419499/mysql-nosql-help-me-to-choose-the-right-one-on-a/4421601#4421601 –

3

のMyISAMは、いくつかの欠点を有します。 MyISAMテーブルのもう一つの不便さ - 彼らはクラッシュセーフではないので、予期せぬシャットダウンやサーバの停電時にデータを失う可能性があります。しかしMyISAMはいくつかのクエリで非常に高速です。

FullText検索に関しては、LuceneやSphinxのような外部検索エンジンを使用することをお勧めします。安全で信頼できるストレージエンジンと高速フルテキストクエリの両方から利益を得ることができます。 http://astellar.com/2011/12/replacing-mysql-full-text-search-with-sphinx/