caw*_*caw 1 mysql indexing sql-order-by
在一个MySQL数据库表中,我具有以下索引:
当我做这样的查询...
SELECT firstname, lastname FROM table ORDER BY lastname ASC, firstname ASC, age DESC
Run Code Online (Sandbox Code Playgroud)
... MySQL不使用索引。
但是当我也按升序使用“年龄”时,它会:
SELECT firstname, lastname FROM table ORDER BY lastname ASC, firstname ASC, age ASC
Run Code Online (Sandbox Code Playgroud)
为什么会这样呢?列是否总是仅按升序编制索引?或者我也可以按降序使用它们吗?为什么不能使用混合订单?
提前致谢!
目前(MySQL 5.6及更低版本)索引均按升序实现。
如果在ORDER子句中混合使用顺序(ASC与DESC),则无法在顺序更改的地方使用索引。
如果指定所有ASC,则可以充分利用索引,如果指定所有DESC,则仍可以充分利用索引,只有MySQL会向后遍历索引。
您可以添加另一列具有相反年龄(max_age-age)的列,并在其上建立索引,以便可以对所有列使用ASC。
| 归档时间: |
|
| 查看次数: |
744 次 |
| 最近记录: |