在索引字段上排序是否有任何优势

Sus*_*pta 1 mysql sql indexing

我想在某个字段上执行排序操作.是否有利于在该领域制定索引.例如:

SELECT * FROM `users` WHERE `age`=33 ORDER BY `name`
Run Code Online (Sandbox Code Playgroud)

在这个查询中,我知道有一个年龄索引是有帮助的,但如果我维护一个名称索引会更好.索引是否可以获得性能提升.而且ORDER BY,经常需要运行其他查询也是如此.

dus*_*uff 5

name单独的索引不太可能对这个查询有很大帮助,但是(age, name)会有一个索引.

虽然它并不完全准确,但将索引视为按索引中的键排序的行列表(例如,按age先排序,然后排序name)通常是有益的.对于示例查询,所有行age=33自然会从按名称排序的复合索引中出来,从而使您无需单独排序.有一个单独的索引name将无助于同样的方式.

  • 虽然也不完全准确,但它有助于认为每个查询(或者更确切地说:查询中使用的每个表)都可以使用“仅一个”索引。对于您的示例,“年龄”的索引比“姓名”的索引要好得多,并且(年龄,姓名)应该胜过两者(当您不按年龄过滤时,相对无用)。 (2认同)
  • 没有一个指标可以适用于所有情况.您必须调整最重要的查询的索引. (2认同)