0

我的 mysql 查询的性能有问题。我有一张很大的桌子

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;

我不会添加任何新数据,而是使用标准的“my-huge.cnf”。尽管如此,我每次查询花费大约 4-5 秒,我将进行大约 9-10*45000 次查询。如果我的计算机有 2gb 内存,我应该更改哪些选项以提高速度。

4

2 回答 2

2

count(*) 可能运行得稍微快一些。

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

您也可以考虑将计数缓存在单独的表中并从中查询。

于 2011-11-05T15:03:04.773 回答
2

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

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

于 2011-11-05T15:07:54.207 回答