0

私の SQL スクリプトは ~7000 レコードをスキャンし、そのうち 100 件をランダムに取得します。また、(SQL JOIN を介して) 追加のテーブルから相関データを取得します。このコードを使用すると、サーバーの応答時間が非常に遅くなります (>7 秒)。

  ROUND(AVG(r.rank),0)  AS avrank,
  COUNT(r.rank) AS countrank
  FROM stories s 
  LEFT JOIN ratings 
  AS r 
  ON r.storyidr = s.id 
  GROUP BY s.id 
  ORDER BY RAND() 
  LIMIT 100";

応答時間を改善し、ページの速度を向上させるためにできることについて誰かが推奨できるかどうか疑問に思っていました. 前もって感謝します。

4

1 に答える 1

1

このクエリに対して EXPLAIN PLAN を実行する必要があります。これらすべてのランダム操作により、すべての行をスキャンする必要があると思います。それ以外の場合はどうですか?

TABLE SCAN が表示された場合は、クエリを書き直してページ スキャンをなくす必要があります。

インデックスはあなたの友達です。

JOIN 内のすべての行に VIEW を作成することをお勧めします。

7000 レコードは多くの数ではありません。すべての VIEW データに対してクエリを実行し、サーバー側でランダムなサンプルを引き出します。

于 2014-06-24T15:47:03.663 に答える