所以我在这里选择了一个日期范围的基本查询。它似乎需要(相对较长的时间来处理)我想知道我可以做些什么来改善处理时间。这是查询。
SELECT h.id as hid,h.created_on,u.id as uid,u.fname,u.lname,u.email
FROM hud h
LEFT JOIN user_hud uh on h.id = uh.hid
LEFT JOIN users u on u.id = uh.uid
WHERE
h.created_on
BETWEEN DATE_SUB( CURDATE( ) ,INTERVAL 12 MONTH )
AND DATE_SUB( CURDATE( ) ,INTERVAL 7 DAY)
答案 0 :(得分:1)
在hud.id
,user_hud.hid
,users.id
,user_hud.uid
和hud.created_on
列上制作索引。
如果没有索引,则需要检查整个表的连接。使用索引,您可以使用更有效的方法(以更新/删除性能损失和更多磁盘空间为代价)
答案 1 :(得分:0)
首先,你需要至少以下索引:hud中的(created_on),user_hud中的(hid)。然后,您可以查看您的查询并意识到您的条件位于联接的第一个表中,因此您可以将该条件移动到子查询中:
SELECT hids.*, u.id as uid, u.fname,
u.lname, u.email
FROM (
SELECT id as hid, created_on
FROM hud,
(SELECT DATE_SUB( CURDATE( ) ,INTERVAL 12 MONTH ) as year_ago,
DATE_SUB( CURDATE( ) ,INTERVAL 7 DAY) as week_ago) d
WHERE created_on BETWEEN year_ago AND week_ago
) as hids
LEFT JOIN user_hud uh USING(hid)
LEFT JOIN users u on u.id = uh.uid;