0

私は非常に大きなデータベーステーブル(MySQL innoDB)を持っています。結合を使用してクエリの下で実行しており、何らかの方法で最適化しようとしています。これ以上実行できません。

以下は私のクエリです

 SELECT a.id, a.name, a.defvar, a.description, a.icon, a.thumb, a.average_rating, a.total_rating, c.rating, a.group_access, d.long_name, a.editor_id, e.users_count
    FROM dir_cat_item AS b
    INNER JOIN dir_item AS a ON a.id = b.item_id
    AND a.status = 'O'
    LEFT JOIN dir_item_notation_user_map AS c ON a.id = c.item_id
    AND c.user_id =%u 
    LEFT JOIN users AS d ON d.id = a.editor_id
    LEFT JOIN (SELECT item_id, COUNT(*) AS users_count
        FROM   module
        GROUP BY item_id) AS e ON e.item_id = b.item_id
    WHERE b.category_id=%u 
    ORDER BY e.users_count DESC
    LIMIT 1,10

ここでの問題は、サブクエリがこれらの多くのレコードをスキャンしていることです 383162 (クエリの説明)

SELECT item_id, COUNT(*) AS users_count
            FROM   module
            GROUP BY item_id

どうすればいいえを減らすことができるかわかりません。レコードのスキャン..まったく手がかりがありません... DBエキスパートが素晴らしい光を共有できる場合..(上記のクエリで選択された列でサブクエリでwhere条件を使用するようなもの...)

前もって感謝します。

よろしく、 モナ

4

0 に答える 0