2013-03-28 45 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);