2012-03-29 45 views
0

我有大約4000萬行的表,我想運行是這樣的:優化選擇從一大桌

SELECT country, count(*) FROM `signups` 
where `signed_up` > '2012-03-20 00:00:00' 
group by country 

基本上得到多少跡象每個國家的UPS一定日期後(一般上週)。每天大約有400K的註冊,總共有4000萬左右。

該查詢只是沒有運行上週,我得到一個'MySQL服務器已經消失'...任何優化這種方式?

+2

你對'國家'有什麼指數? – 2012-03-29 14:26:11

+0

只有一個索引,主鍵是signup_id – luqita 2012-03-29 14:27:44

+0

總是使用** EXPLAIN ** SELECT ...命令來查看數據庫如何回答您的查詢。自從您在此字段上搜索以來,signed_up上的索引也不會受到傷害。 – luukes 2012-03-29 14:29:50

回答

2

請使用下面的查詢並在signed_up列上添加一個索引。你一定會獲得性能提升。

選擇國家,計數(signup_id)FROM signups 其中signed_up> '2012-03-20 00:00:00' 組由國家

問候, 阿洛克

1

計數*是命中到性能。如果可能,總是更好,不要做任何事情。這只是導致數據庫引擎做更多的工作,從而減慢查詢速度。

Alok是正確的,爲您通常搜索的列添加索引,並且查詢運行時已經創建哈希表。否則,引擎需要在實際獲得結果之前創建結果的哈希表。這個指數是事先做好的。