2011-11-05 78 views
0

我有我的mysql查询perfomance问题。我有一个非常大的桌子不好的MySQL性能很简单select

create table query(
    id Integer, 
    session Integer, 
    time Integer, 
    name Integer, 
    region Integer); 

数据量 - 2 gb。我在“名称” - 7 GB上做了索引。

我的查询是这样的:

select count(id) from query where name=somevalue; 

我不会添加任何新的数据,而我使用的标准“我-huge.cnf”。尽管如此,我花费了大约4-5秒的时间查询,我将要做大约9-10 * 45000个查询。如果我的电脑有2GB内存,应该更改哪些选项以提高速度。

+1

更多RAM是您可能需要的。 – ceejayoz

+2

您的数据为2GB,但表格中某列的索引为7GB?没有意义... –

+0

你使用哪种引擎(inno,myisam等)?同时有多少个并行查询? –

回答

2

计数(*)的运行速度可能稍快。

select count(*) as rowcount from query where name=somevalue; 

另外,您可能会考虑将计数缓存到单独的表中并从中进行查询。

+0

非常感谢,它真的帮助。但是我计划在将来做一些更复杂的查询,所以我不得不增加某种缓冲区。但你刚刚救了我3-4天的处理。 – epahomov

2

如果您从未更改过数据,那么您应该考虑针对所有可能的名称运行查询(SELECT DISTINCT(name) FROM query)一次,然后将值COUNT()存储在缓存中。为此,您可以创建一个表cache,其中nametotal为列,并为每个名称填充运行SELECT name, COUNT(*) AS total FROM query WHERE name = 'name'的结果。

然后你会简单地SELECT total FROM cache WHERE name = 'name',这将是非常快的。

+0

如果问题是获得多次计数信息,这将有所帮助。我想在第一次收集信息时加快速度。作为我想要使用更大的缓冲区的方式。 – epahomov