我的表有近30 M记录,大小为6.6 GB。我需要从中查询一些数据并使用group by和order by。查询数据需要花费太长时间,我多次失去与DB的连接......
我将所有必填字段的索引作为键和复合键。我还能做些什么来使查询更快?
示例查询:
select id, max(price), avg(order) from table group by id, date order by id, location.
答案 0 :(得分:0)
使用EXPLAIN query
,其中查询是您的查询。例如:EXPLAIN select * from table group by id, date order by id, location
。
您将看到MySQL分析您的查询并显示其查找的索引的表。可能你没有足够的(足够的)指数。
答案 1 :(得分:0)
我认为你不能。没有过滤器(WHERE子句)和AVG,必须读取整个表。
我唯一能想到的是拥有一个带有ID,AVG_ORDER,MAX_PRICE(或任何你需要的)的新表,并在插入/更新新行时使用触发器或存储过程对其进行更新。
ID上的索引,PRICE索引可能会帮助您,如果您不需要那个讨厌的平均值。
答案 2 :(得分:0)
索引不会对你有任何帮助。您正在对列进行平均,因此您必须读取表中的每一行。这需要时间。