优化大表中的选择

时间:2012-03-29 14:24:04

标签: mysql

我有一个大约有4000万行的表,我想运行这样的东西:

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

基本上是在某些日期之后(通常是上周)获得每个国家/地区的注册数量。每天大约有40万次注册,总共有4千万次注册。

查询只是在上周没有运行,我得到'MySQL服务器已经消失'...有什么方法可以优化这个?

2 个答案:

答案 0 :(得分:2)

请使用以下查询并在signed_up列上添加索引。你肯定会获得性能提升。

SELECT country,count(signup_id)FROM signups 其中signed_up> '2012-03-20 00:00:00' 按国家分组

此致 阿洛克

答案 1 :(得分:1)

计数*是对性能的打击。如果可能的话,总是更好,不做任何事情。这只会导致数据库引擎做更多工作,从而减慢查询速度。

Alok是对的,为您通常搜索的列添加索引,并且在查询运行时已经创建了哈希表。否则,引擎将需要在实际获得结果之前创建结果的哈希表。索引事先做好了。