我有大約4000萬行的表,我想運行是這樣的:優化選擇從一大桌
SELECT country, count(*) FROM `signups`
where `signed_up` > '2012-03-20 00:00:00'
group by country
基本上得到多少跡象每個國家的UPS一定日期後(一般上週)。每天大約有400K的註冊,總共有4000萬左右。
該查詢只是沒有運行上週,我得到一個'MySQL服務器已經消失'...任何優化這種方式?
我有大約4000萬行的表,我想運行是這樣的:優化選擇從一大桌
SELECT country, count(*) FROM `signups`
where `signed_up` > '2012-03-20 00:00:00'
group by country
基本上得到多少跡象每個國家的UPS一定日期後(一般上週)。每天大約有400K的註冊,總共有4000萬左右。
該查詢只是沒有運行上週,我得到一個'MySQL服務器已經消失'...任何優化這種方式?
請使用下面的查詢並在signed_up列上添加一個索引。你一定會獲得性能提升。
選擇國家,計數(signup_id)FROM signups
其中signed_up
> '2012-03-20 00:00:00' 組由國家
問候, 阿洛克
計數*是命中到性能。如果可能,總是更好,不要做任何事情。這只是導致數據庫引擎做更多的工作,從而減慢查詢速度。
Alok是正確的,爲您通常搜索的列添加索引,並且查詢運行時已經創建哈希表。否則,引擎需要在實際獲得結果之前創建結果的哈希表。這個指數是事先做好的。
你對'國家'有什麼指數? – 2012-03-29 14:26:11
只有一個索引,主鍵是signup_id – luqita 2012-03-29 14:27:44
總是使用** EXPLAIN ** SELECT ...命令來查看數據庫如何回答您的查詢。自從您在此字段上搜索以來,signed_up上的索引也不會受到傷害。 – luukes 2012-03-29 14:29:50