4

これはあまりにも一般的または主観的な質問かもしれませんが、私は助けが必要であり、正確で簡潔な質問が何であるかさえわかりません. 私は過去数日間、これを理解しようとして多くのグーグル検索を行ってきましたが、どのアプローチを取るべきかについてこれまで以上に混乱しています.

MySQL で、製品カタログ用のデータベースを構築しました。製品とタグ、製品とカテゴリなど、いくつかの多対多の関係を追跡する必要があるため、制約INNODBを利用できるように、これらのテーブルで使用する必要があると判断しました。FOREIGN KEYそれはすべて問題ありませんが。INNODB対応しておりませんFULLTEXT。ワイルドカードが検索語の先頭にある場合、インデックスを使用できないため、LIKE '%WORD%'in句を使用するとパフォーマンスが低下することを読みました。WHEREデータベースには、ある時点で多くのエントリが含まれる可能性が高く、検索に永遠にかかることは望ましくありません。

では、どのようにしてケーキを食べ、それを食べるのでしょうか? どちらかを選択する必要がありますか:FULLTEXTまたはFOREIGN KEY? MYISAM検索に最も関連性の高い列のみで構成される一種の要約テーブルを作成し、INNODB テーブルでトリガーを使用して更新を維持する必要がありますか? FOREIGN KEYそれは、少なくとも部分的には、最初に制約を使用することの利点、つまり重複した余分なデータを排除することを無効にしないでしょうか? 大規模なデータベースの検索を可能な限り最高のパフォーマンスで動作させるための最良のパターンは何ですか - 少なくともINNODBvs.の使用に関してはMYISAM?

明るく経験豊富な人が、少なくとも私を正しい方向に向けることができれば幸いです. 前もって感謝します。

4

2 に答える 2

5

昨年、MyISAM FULLTEXT インデックス、MySQL 5.6 での InnoDB FULLTEXT インデックスの新しい実装など、さまざまな全文検索ツールを比較するウェビナー プレゼンテーションFull Text Search Throwdownを行いました。私のスライドは、Slideshare: Full Text Search Throwdownでも見つけることができます。

パフォーマンスに関しては、Sphinx Searchが明らかに勝者でした。私が相談したほとんどのサイトでは、InnoDB を使用して標準データを保存し、Sphinx Search を使用して同じデータの補助インデックスを保存しています。次に、InnoDB によるデータ整合性と Sphinx Search による高速化という、両方の長所を活用します。

Sphinx Search の欠点は、特定の Sphinx Search インデックスにコンテンツを段階的に追加するのが難しいことです。1 つの行をインデックスに追加するには、コレクション全体のインデックスを再作成するのと同じくらいの作業が必要です。これにはいくつかの回避策があります。

InnoDB FTS はかなり新しいもので、奇妙な癖があります。Percona の同僚による詳細なレビューをお読みになることをお勧めします。

PS: MyISAM は使用しないでください。:-)

于 2013-06-12T21:48:36.893 に答える