2013-03-28 46 views
1

我有这样的查询。MYSQL性能调整与分组条款

SELECT count(*) 
FROM table1 e 
WHERE e.column1=1 
    AND e.id IN 
    (SELECT MAX(ID) 
    FROM table2 A 
    WHERE A.column1=1 
     AND A.date=CURDATE() 
    GROUP BY A.column2); 

当我运行这个查询时,它占用了太多的时间,因为我有成千上万的记录。我如何调整查询来更好地执行。

在此先感谢。

编辑:列2表2中的表1是在

变化
+0

阅读有关EXPLAIN语句这里http://dev.mysql.com/doc/refman/5.0/en/using-explain.html – ellak 2013-03-28 08:00:48

+0

@MahmoudGamal表1的id与OneToMany相关的table2。那就是为什么我需要max(id)。 – 2013-03-28 08:05:34

回答

2

ID来使用,而不是加入(。)。像

SELECT count(*) 
FROM table1 AS e 
Inner join 
(
    SELECT MAX(ID) 
    FROM table2 A 
    WHERE A.column1 = 1 
    AND A.date = CURDATE() 
    GROUP BY A.column2 
) t2 on e.id = t2.id 
WHERE e.column1 = 1 
+0

@Mahmoud Gamal:非常好,工作很棒。谢谢兄弟 – 2013-03-28 08:12:41

+0

@Mahmoud,谢谢编辑 – evgenyl 2013-03-28 08:23:40

+0

@evgenyl - 随时欢迎您:) – 2013-03-28 08:24:53

0

可能:

SELECT count(*) 
FROM table1 e 
WHERE e.column1=1 
    AND EXISTS 
    (SELECT * 
    FROM table2 A 
    WHERE A.column1=1 
     AND A.date=CURDATE() 
     AND A.ID = e.id);