10 我有一个带有ORDER BY子句的查询,该子句使用一列,该列是WHERE子句中使用的索引的最后一列,本质上是以下形式: SELECT cols FROM tables WHERE col_1 = x AND col_2 = y AND col_3 = z ORDER BY col_4 并按此顺序在列(col_1,col_2,col_3,col_4)上创建索引。 当我分析查询时,超过99%的时间用于“排序结果”状态。如果有区别,col_4是一个时间戳列。我了解到ORDER BY只能在某些情况下使用索引,但是对于优化器何时才能使用它仍然有些困惑。 mysql index sorting — 克里斯·库珀 source
13 您应该EXPLAIN EXTENDED在查询之前追加并自己查看结果。 它应该有一个条目 可能的钥匙 如果此列为NULL,则没有相关索引。在这种情况下,您可以通过检查WHERE子句来检查它是否引用了某些适合索引的列,从而可以提高查询性能。 和 按键 key列指示MySQL实际决定使用的密钥(索引)。如果MySQL决定使用mays_keys索引之一来查找行,则将该索引列为键值。 有关更多信息,您可以参考此Explain输出和Explain join_types — 马赫什·帕蒂尔(Mahesh Patil) source 我的问题特别是与ORDER BY子句有关。我的查询使用指定的索引来限制返回的行,但是考虑到排序的性能,我猜测它没有将其用于ORDER BY子句。 — 克里斯·库珀 1 在某些情况下,MySQL可以使用索引来满足ORDER BY子句,而无需进行任何额外的排序。即使ORDER BY与索引不完全匹配,也可以使用索引,只要索引的所有未使用部分和所有额外的ORDER BY列在WHERE子句中都是常量即可。以下查询使用索引来解析ORDER BY部分,请参考以下dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html — Mahesh Patil 2012年
1 您EXPLAIN在查询(explain select-or-whatever-your-query-is)上使用。 possible_keys显示可以使用的,key实际使用的。 — 贾斯 source 1 补充一点:explain format=json select ...更加强大。它包括used_key_parts,它告诉您是否部分或完全使用了组合键,并index_condition告诉您查询的哪一部分负责哪个索引。 — okdewit