2012-09-19 44 views
0

helo大的mysql数据库计数不同的性能

我有一个大问题,我有一个大约50M行的表。在这张表中,我有3列:位置,一个人的代码和日期。它看起来像这样:

date   person location 

2012-04-07 837592  0 
2012-04-08 892857  6 
2012-04-06 726474  1 
2012-04-03 204857  4 
2012-04-08 516485  9 
2012-04-07 405867  0 

所以一个人可以在同一日期或不同日期在同一地点的不同地点。

我现在的问题是,我需要这样的查询:

SELECT COUNT (DISTINCT person) FROM my_table WHERE location = '0';

所以基本上我都数不过来diferent prsons这是对在diferent倍一个地方。 ,如果我以前面描述的方式做这个查询需要大约20分钟。

所以我问是否有更快的方式做到这一点?

+0

你需要更好的硬件。 – Petah

+0

你觉得我在这里需要多少钱,并且记住我每个月可以得到20M行 – tilen

回答

0

试试这个::

SELECT person, COUNT (*) FROM my_table WHERE location = '0' group by person; 

这将提高性能,你可以像使用索引列下。

+0

我试过了,需要花费相同的时间。 加我试过索引,它似乎没有工作。 – tilen

+0

@tilen:请给我看表格的构造,以及表格的解释计划 –

+0

构造? id> 1;选择类型>简单; table> vse,type> ref,可能的键> datum_2,key> datum_2,key_len> 607,ref> cons,cons,rows 765,extra> useing where;使用索引 – tilen

0

尝试这样

SELECT COUNT (*) FROM my_table WHERE location = '0' GROUP BY person;