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
你能解释更多吗,所以你的答案变得更有用,我们学到了一些东西?订单为什么重要?为什么是一个复合索引,而不是2个单独的索引? – Jocelyn 2012-08-15 22:27:35
@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
因此,几个小时后我可以做这样的改变:我创建了两个索引:'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