加快mysql查询速度

时间:2013-04-06 18:04:59

标签: mysql

所以我在这里选择了一个日期范围的基本查询。它似乎需要(相对较长的时间来处理)我想知道我可以做些什么来改善处理时间。这是查询。

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)

2 个答案:

答案 0 :(得分:1)

hud.iduser_hud.hidusers.iduser_hud.uidhud.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;