2016-10-29 10 views
0

私は大きなデータベースを持っており、すべてのページのために私は労働組合にすべてのクエリを実行する必要があり、大きなスクリプト働いています:上の負荷がある場合には、このクエリは、あまりにも多くを取ると最適化連合すべてのMySQL

(SELECT q.* 
    FROM 
     (SELECT q.* 
      FROM iz q 
      WHERE id <> 5 
       AND langage = > 'en' 
      ORDER BY nshares DESC LIMIT 50) q 
    ORDER BY rand() LIMIT 3) > 
UNION 
    (SELECT q.* 
    FROM 
     (SELECT q.* 
      FROM iz q 
      WHERE id <> 5 
       AND langage > = 'en' 
      ORDER BY id DESC LIMIT 20) q 
    ORDER BY rand() LIMIT 7) 
UNION 
    (SELECT q.* 
    FROM 
     (SELECT q.* 
      FROM iz q 
      WHERE id <> 5 
       AND langage = > 'en' 
      ORDER BY rand() LIMIT 20) q 
    ORDER BY rand() LIMIT 3) 
ORDER BY > rand() LIMIT 8 

をそれは私がそれを最適化する方法を見つけることができると思っているので、それはCPU上に多くの負荷を置くサーバー。私は何の結果もなしにいくつかのクエリの制限を減らそうとしましたが、私はunionをunionの代わりにすべて使用しようとしましたが、何も動作しないようです。 助けることができる人はいますか?おかげさまで

答えて

0

キャッシングはどうですか?少なくともnsharesとid descで順序付けられた最初の2つの内部クエリは、一時テーブルにキャッシュされる可能性があります。毎分cronjobでそれらを更新してください。

+0

私の場合は唯一利用可能な解決策ですか? –

+0

それは私が考えることができる多くのパフォーマンスの向上と迅速なソリューションです。他の方法があるかどうかはわかりません。たぶん、複数のrand()呼び出しを1つの呼び出しに制限することができます。私はまだそれをどうやって行うのか分からない。 – edlerd