2012-08-15 174 views
0

我一直在研究一个mysql数据库,并且具有数据库的最重要的表之一将在900到1000万条记录之间。我能够做这个查询:如何优化此选择查询? (MySQL)

select MAX(SEN_ID) as SEN_ID from senal group by variable_VAR_ID 

但它需要12分钟。我该如何优化这个查询?

这个查询在数据库很小的时候工作正常,但现在数据库中有数百万行,我意识到我应该考虑优化它。

查询中执行EXPLAIN显示此:

id select_type table type possible_keys key    key_len ref rows  Extra 
1 SIMPLE  senal index NULL   fk_senal_variable1 4  NULL 6333242 Using index 

回答

1

您需要创建综合指数variable_VAR_ID + SEN_ID

注1:不是两个分开的指标,而是一个复合
注2:是的,为了问题

PS:这里是如何创建索引的语法描述:http://dev.mysql.com/doc/refman/5.5/en/create-index.html

+1

你能解释更多吗,所以你的答案变得更有用,我们学到了一些东西?订单为什么重要?为什么是一个复合索引,而不是2个单独的索引? – Jocelyn 2012-08-15 22:27:35

+1

@Jocelyn该命令很重要,因为MySQL首先使用组合索引的最左边的字段。因此,在这种情况下,您希望mysql将variable_var_id限定为唯一的范围,然后查看SEN_ID以获取每个唯一variable_var_id的最大值。看看这篇关于优化查询的文章。[链接](http://www.databasejournal.com/features/mysql/article.php/1382791/Optimizing-MySQL-Queries-and-Indexes.htm) – patsweet 2012-08-15 22:54:22

+0

因此,几个小时后我可以做这样的改变:我创建了两个索引:'INDEX'SEN_SUPINDX'('SEN_ID' DESC,'SEN_FECH' DESC,'variable_VAR_ID' DESC)'和'INDEX'VAR_ID''('variable_VAR_ID' DESC)''但我不知道如何正确使用它。 – user1601753 2012-08-16 14:54:52