如何在mysql中优化大表?

如何在mysql中优化大表?,mysql,optimization,indexing,bigdata,Mysql,Optimization,Indexing,Bigdata,我有一个近30米记录的表,大小为6.6 GB。我需要从中查询一些数据,并使用group by和order by。查询数据花了我太长时间,我多次与数据库失去连接 我在所有必要的字段上都有索引,如键和复合键。我还可以做些什么来加快查询速度 查询示例: select id, max(price), avg(order) from table group by id, date order by id, location. 使用解释查询,其中查询是您的查询。例如:EXPLAIN按id从表组中选择*,按

我有一个近30米记录的表,大小为6.6 GB。我需要从中查询一些数据,并使用group by和order by。查询数据花了我太长时间,我多次与数据库失去连接

我在所有必要的字段上都有索引,如键和复合键。我还可以做些什么来加快查询速度

查询示例:

select id, max(price), avg(order) from table group by id, date order by id, location.

使用
解释查询
,其中查询是您的查询。例如:
EXPLAIN按id从表组中选择*,按id从日期顺序中选择*,位置


您将看到一个表,其中MySQL分析您的查询并显示它查找的索引。可能你没有足够的索引。

我认为你做不到。如果没有筛选器(WHERE子句)和AVG,则必须读取整个表

我能想到的唯一一件事就是创建一个具有ID、AVG_ORDER、MAX_PRICE(或任何您需要的)的新表,并在插入/更新新行时使用触发器或存储过程进行更新


若你们不需要那个讨厌的平均值,那个么ID、价格指数上的指数可能会对你们有所帮助

索引对您没有任何好处。您要平均一列,因此必须读取表中的每一行。这需要时间。

您应该只指定所需的列,并避免在select QUERY中使用*您是否有
WHERE
子句?如果你是在30米以上的记录,我会期待缓慢的行为。事实上,您的PHP脚本可能超时了。我不知道您是否可以选择它,但使用map reduce范式在nosql数据库(如mongodb或couchbase)中执行此操作可能是一个很好的机会。请删除所有索引并尝试使用此索引(id、日期)。我以前尝试过此方法。但在mysql中,这并不能给出正确的答案。例如,我已经在id上有了索引,但当我解释select*from table order by id时,它在键下仍然显示null。@Suanmeigo您能粘贴explain语句的确切输出吗?这会给你很多提示