我的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内存,我应该改变哪些选项以提高速度。
答案 0 :(得分:2)
计数(*)可能稍微快一点。
select count(*) as rowcount from query where name=somevalue;
您也可以考虑在单独的表中缓存计数并从中查询。
答案 1 :(得分: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'
,这将非常快。