0

MyISAM DBで約50,000のクエリを実行していますが、クエリの実行時間が長くなると遅くなります。たとえば、最初は1秒間に20行を実行し、最後には1秒間に5行を実行します。これは、MyISAMが挿入のたびにテーブルをロックするために発生するのでしょうか、それとも他の理由で発生するのでしょうか。

MyISAMのみがサポートしているフルテキストインデックスでmatch()against()を使用しているため、MyISAMを使用する必要があると思います。この機能でInnoDBまたは他のDBタイプを使用することは可能ですか、または現在のクエリの実行時間は約45分であるため、クエリを高速化する方法はありますか?

クエリ構造について多くの回答が予想されます。列が異なる3つのテーブルを1つのテーブルにまとめ、3つの異なる行を一致させて「スーパーテーブル」を形成しようとしています。その結果、多くの一致を実行する必要があります( )against()、preg_match、selects、およびloopingを使用して、これらを正確に一致させます。ループを最適化するために、プリペアドステートメントでPDOを使用していますが、これにより、mysql_connectと標準関数を使用して、クエリ時間が上記の時間に短縮され、1時間近くになりました。

クエリは最初は遅くないことを覚えておいてください。約10,000のクエリが実行された後、それは著しく遅くなり、サーバー会社が受け入れるのに不合理なレベルに達するまで、それはますます遅くなります。解決策?

4

2 に答える 2

0

私のお勧めは、MySQL を更新することです。

InnoDB テーブルでフルテキスト インデックスを使用できる MySQL -V 5.6+ の書き込みが多い場合、Innodb を使用して行をロックできるため、これは非常に大きなことです。

ANALIZEパフォーマンスを少し向上させることができるインデックスを修復することもできます

于 2012-07-05T20:41:50.363 に答える
0

MySQL 全文検索は、設計上、ビッグ データを効率的に処理できません。MyISAM から InnoDB への切り替えは、ほとんどの場合、非 FT クエリのパフォーマンスと同時実行性に役立ち、InnoDB がトランザクションをサポートしているためデータを安全に保つことができますが、FT クエリの速度はあまり向上しません (Percona のベンチマークによると)。http://bit.ly/M6DMsj )。

フルテキスト クエリを MySQL から移動することをお勧めします。この場合、Solr や Sphinx などの外部検索エンジンが非常に役立ちます。

私は Solr の専門家ではありませんが、Sphinx を使用することにした場合は、http://astellar.com/2011/12/replacing-mysql-full-text-search-with-sphinx/をガイドとして使用できます。初期構成。

お役に立てれば。

于 2012-07-07T04:36:22.277 に答える