我有一个包含近 30 M 记录的表,大小为 6.6 GB。我需要从中查询一些数据并使用 group by 和 order by。查询数据花了我太长时间,我失去了很多次与数据库的连接......
我在所有必要的字段上都有索引作为键和复合键。我还能做些什么来加快查询速度?
示例查询:
select id, max(price), avg(order) from table group by id, date order by id, location.
我有一个包含近 30 M 记录的表,大小为 6.6 GB。我需要从中查询一些数据并使用 group by 和 order by。查询数据花了我太长时间,我失去了很多次与数据库的连接......
我在所有必要的字段上都有索引作为键和复合键。我还能做些什么来加快查询速度?
示例查询:
select id, max(price), avg(order) from table group by id, date order by id, location.
use EXPLAIN query
, where query is your query. For example: EXPLAIN select * from table group by id, date order by id, location
.
You'll see a table where MySQL analyses your query and shows which indices it looks for. Possibly you don't have sufficient (god enough) indices.
我不认为你可以。如果没有过滤器(WHERE 子句)和 AVG,则必须读取整个表。
我唯一能想到的就是拥有一个带有 ID、AVG_ORDER、MAX_PRICE(或任何你需要的东西)的新表,并在插入/更新新行时使用触发器或存储过程来更新它。
如果您不需要那个讨厌的平均值,ID,PRICE 索引可能会对您有所帮助。
索引不会对你有任何好处。您正在平均一列,因此您必须阅读表中的每一行。这需要时间。