0

4000 レコードのテーブルがあります (全文検索で処理する方がはるかに簡単です)。検索クエリが初めて実行されるときは、はるかに遅くなります。5~10秒ほどかかります。すると速くなります。サイトが 10 ~ 15 分間非アクティブなままである場合、クエリを再度実行しようとすると速度が低下します。

私はmysql + PHPを使用しています。これはキャッシングの問題だと思います。私たちのサイトは、キャッシュにアクセスできないサードパーティのサーバーでホストされています。

私の問題の回避策はありますか。

前もって感謝します!

編集:

こんにちは、返信ありがとうございます。これが私のクエリです。

PRODUCT_2_CATEGORY、PRODUCT、MERCHANT から PRODUCT_2_CATEGORY.PRODUCT_ID を選択 WHERE PRODUCT_2_CATEGORY.PRODUCT_ID = PRODUCT.ID AND PRODUCT.PRO_STATUS='active' AND PRODUCT.MERCHANT_ID = MERCHANT.ID AND MERCHANT.M_STATUS='active' AND ( CAT_ID='1' OR CAT_ID='1004' OR CAT_ID='1005' OR CAT_ID='1006' OR CAT_ID='1007' OR CAT_ID='1008' OR CAT_ID='1002' OR CAT_ID='1003' OR CAT_ID='45' OR CAT_ID= '46' または CAT_ID='74' または CAT_ID='75' または CAT_ID='76' または CAT_ID='49' または CAT_ID='50' または CAT_ID='77' または CAT_ID='78' または CAT_ID='79 ' OR CAT_ID='80' OR CAT_ID='81' OR CAT_ID='82' OR CAT_ID='83' OR CAT_ID='84' OR CAT_ID='47' OR CAT_ID='89' OR CAT_ID='51'または CAT_ID='52' または CAT_ID='88' または CAT_ID='87' または CAT_ID='86' または CAT_ID='85' または CAT_ID='48' または CAT_ID='53' または CAT_ID='54' または CAT_ID ='90' OR CAT_ID='200' OR CAT_ID='91' OR CAT_ID='92' OR CAT_ID='93' OR CAT_ID='94' OR CAT_ID='11' OR CAT_ID='95' OR CAT_ID=' 98' OR CAT_ID='99' OR CAT_ID='100' OR CAT_ID='101' OR CAT_ID='96' OR CAT_ID='102' OR CAT_ID='103' OR CAT_ID='104' OR CAT_ID='105'または CAT_ID='106' または CAT_ID='97' または CAT_ID='107' または CAT_ID='108' または CAT_ID='109' または CAT_ID='110' または CAT_ID='114' または CAT_ID='119' または CAT_ID ='120' または CAT_ID='121' または CAT_ID='115'または CAT_ID='122' または CAT_ID='123' または CAT_ID='124' または CAT_ID='125' または CAT_ID='116' または CAT_ID='127' または CAT_ID='128' または CAT_ID='129' または CAT_ID ='117' OR CAT_ID='130' OR CAT_ID='131' OR CAT_ID='118' OR CAT_ID='111' OR CAT_ID='132' OR CAT_ID='136' OR CAT_ID='137' OR CAT_ID=' 138' OR CAT_ID='139' OR CAT_ID='140' OR CAT_ID='133' OR CAT_ID='141' OR CAT_ID='142' OR CAT_ID='143' OR CAT_ID='144' OR CAT_ID='145'または CAT_ID='146' または CAT_ID='134' または CAT_ID='147' または CAT_ID='148' または CAT_ID='149' または CAT_ID='150' または CAT_ID='151' または CAT_ID='135' または CAT_ID ='152' または CAT_ID='153' または CAT_ID='154' または CAT_ID='155' または CAT_ID='156' または CAT_ID='64' または CAT_ID='158' または CAT_ID='70' または CAT_ID='164' または CAT_ID='71' または CAT_ID='165'または CAT_ID='159' または CAT_ID='166' または CAT_ID='167' または CAT_ID='168' または CAT_ID='169' または CAT_ID='160' または CAT_ID='73' または CAT_ID='170' または CAT_ID ='172' OR CAT_ID='173' OR CAT_ID='174' OR CAT_ID='161' OR CAT_ID='175' OR CAT_ID='176' OR CAT_ID='177' OR CAT_ID='178' OR CAT_ID=' 162' OR CAT_ID='179' OR CAT_ID='180' OR CAT_ID='181' OR CAT_ID='182' OR CAT_ID='183' OR CAT_ID='163' OR CAT_ID='184' OR CAT_ID='192'または CAT_ID='191' または CAT_ID='190' または CAT_ID='189' OR CAT_ID='188' OR CAT_ID='187' OR CAT_ID='186' OR CAT_ID='185' OR CAT_ID='193' OR CAT_ID='112' OR CAT_ID='113' OR CAT_ID='65' OR CAT_ID='66' OR CAT_ID='67' OR CAT_ID='68' OR CAT_ID='69') AND MATCH(PRODUCT.TITLE) AGAINST('shirt' IN BOOLEAN MODE) ORDER BY PRODUCT.TITLE ASC LIMIT 0, 12

私たちのサイトは、サードパーティの Web サーバー (Plesk コントロール パネル) でホストされています。そのため、他のソフトウェアをインストールできるかどうかはわかりません。

私たちのサイトは 2010.shoppingstrip.com.au です。このクエリは、何かを検索するときに実行されます。

ありがとう

4

2 に答える 2

1

テーブルにインデックスを付けると、大きな違いが生じる可能性があります。MySql データベースに 150 万件のレコードがある最近のジョブでは、結合を含む基本的なクエリに 35 分以上かかっていました。テーブルのインデックス作成後 (約 3 ~ 4 分かかりました)、クエリは 4 秒で実行されました。

クエリについても、改善の可能性を検討する必要があります。たとえば、エキゾチック結合はクエリを大幅に長くする可能性があります。また、一度にレコードを取得するために過度の foreach ループを実行すると、過度の遅延が発生する可能性があります。状況によっては、パフォーマンスを向上させるために、特定の重要な要素のみを検索するようにクエリを調整できる場合があります。

クエリをテストするには、ローカル マシンに WAMP サーバーのコピーをスローします。スクリプトとデータベースをインポートし、いくつかのテストを実行します。これにより、クエリが非効率なのか、問題がサーバーにあるのかを特定できます。

使用する検索方法も検討してください。たとえば、mysql での値の検索は、「LIKE」、「=」、「REGEXP」などの演算子を使用して実行できます。パフォーマンスを改善し、ロード時間を短縮するために実験してください。

最後に、他のすべてが失敗した場合は、キャッシュ ソリューションまたはより堅牢なデータベース ホスティングに頼ることができます。4,000 レコードというのは、大局的に見ればそれほど大きなものではなく、読み込み時間がこれほど遅くなることはないはずです。Zend Framework のビルトイン キャッシング システムを介したキャッシングはうまくいきました。

それでも問題が解決しない場合は、クエリのサンプルを投稿してください。

于 2010-06-17T19:57:53.747 に答える
-1

MySQL は、パフォーマンスと使いやすさの両方の点で、全文検索が非常に苦手です。

これにはSphinxを使用することをお勧めします。

于 2010-06-17T19:43:39.717 に答える