我有一个大约有4000万行的表,我想运行这样的东西:
SELECT country, count(*) FROM `signups`
where `signed_up` > '2012-03-20 00:00:00'
group by country
基本上是在某些日期之后(通常是上周)获得每个国家/地区的注册数量。每天大约有40万次注册,总共有4千万次注册。
查询只是在上周没有运行,我得到'MySQL服务器已经消失'...有什么方法可以优化这个?
答案 0 :(得分:2)
请使用以下查询并在signed_up列上添加索引。你肯定会获得性能提升。
SELECT country,count(signup_id)FROM signups
其中signed_up
> '2012-03-20 00:00:00'
按国家分组
此致 阿洛克
答案 1 :(得分:1)
计数*是对性能的打击。如果可能的话,总是更好,不做任何事情。这只会导致数据库引擎做更多工作,从而减慢查询速度。
Alok是对的,为您通常搜索的列添加索引,并且在查询运行时已经创建了哈希表。否则,引擎将需要在实际获得结果之前创建结果的哈希表。索引事先做好了。