私は実行するこのクエリを持っています:
SELECT u1.firstname,
u1.lastname,
u1.totalcommission,
u1.userid,
count(DISTINCT u2.userid) AS level1,
count(DISTINCT u3.userid) AS level2
FROM users AS u1
INNER JOIN users AS u2 ON u1.userid = u2.affiliate1
AND u2.signupdate BETWEEN '2011-01-01 00:00:00' AND '2013-04-02 23:59:59'
LEFT JOIN users AS u3 ON u1.userid = u3.affiliate2
WHERE u1.usertypeid != '1'
GROUP BY u1.userid
ORDER BY count(DISTINCT u2.userid) DESC
テーブルのインデックス:
PRIMARY BTREE Yes No userid 41318 A No
email BTREE Yes No email 41318 A No
affiliate1 BTREE No No affiliate1 1967 A Yes
affiliate2 BTREE No No affiliate2 258 A Yes
signupdate BTREE No No signupdate 41318 A No
クエリは機能しますが、問題は本当に遅いことです (テーブル users には 43k 行があり、それ以上ありません)。count(distinct) 関数により、約 10 秒かかります。それをより高性能なものに置き換える方法はありますか?
ありがとう、
/ルカ