【问题标题】:How to get indexed DESC sorting in MySQL 5.7? [duplicate]如何在 MySQL 5.7 中获得索引 DESC 排序? [复制]
【发布时间】:2020-10-12 04:35:06
【问题描述】:

较新版本的 MySQL,尤其是 v8.0,支持 DESC 索引。不幸的是,由于我的云托管平台,我被 MySQL 5.7 及其 ASC 索引卡住了。

据我了解,索引可以大大加快排序速度。我有一个包含数百万行的表,我的大部分排序都是 DESC。

有什么方法可以对我定期排序的列进行索引以实现极快的 DESC 排序?首先想到的是将我想要排序的整数值存储为负数.

【问题讨论】:

  • 负值是你最好的选择。我不知道为什么 MySQL 不知道如何向后读取索引。这并不是什么大创新。
  • @GordonLinoff 显然 MySQL 足够聪明,可以向后读取索引。
  • 。 .如果是,那么降序排序应该使用索引。
  • 如果使用索引按一列升序排序,同一索引的第二列降序排序,可能会有所收获。但即便如此,您仍在对内存甚至可能是 cpu d-cache 进行一些额外的扫描。 @Rage 想展示一些查询、表结构 (SHOW CREATE TABLE {tablename})、EXPLAIN {query}、查询时间测量,并查看使用 generated columns indexed 的第二个“假” desc 索引是否有所作为?

标签: mysql sql database indexing database-design


【解决方案1】:

https://www.percona.com/blog/2016/10/20/mysql-8-0-descending-indexes-can-speedup-your-queries/

显然 MySQL 足够聪明,可以向后读取索引。但是,只有当所有 ORDER BY 都属于同一类型时,才能向后读取索引。在 MySQL 5.7 中混合 DESC 和 ASC 的那一刻,就是等待查询完成的那一刻。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-13
    • 2012-04-23
    • 2023-02-23
    • 2018-01-24
    • 2016-10-26
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多