【问题标题】:Order by SQL query按 SQL 查询排序
【发布时间】:2013-01-16 09:50:36
【问题描述】:

这是在线门户的产品表结构。
目前product表有超过100万条记录。

我创建了关于状态和交付 ID 的索引。
通过 ORDER BY status DESC, delivery_id ASC
列出产品时出现性能问题 完整查询:

SELECT product_name FROM product ORDER BY status DESC, delivery_id ASC LIMIT 10

如何改进此查询以更快地执行?

【问题讨论】:

标签: mysql sql performance sql-order-by multiple-columns


【解决方案1】:

ORDER BY Optimization 中所述:

在某些情况下,MySQL 无法使用索引来解析ORDER BY,尽管它仍然使用索引来查找与WHERE 子句匹配的行。这些案例包括:

[ <em>deletia</em> ]

  • 你把ASCDESC混在一起:

    SELECT * FROM t1 ORDER BY <strong><em>key_part1</em></strong> DESC, <strong><em>key_part2</em></strong> ASC;

【讨论】:

  • 有什么解决办法吗?
  • @Basilevs:一种选择是对statusdelivery_id 进行不同的定义,这样所需的排序就不必按相反的方向排序。
  • 我们可以在不改变列定义的情况下创建反向索引吗?
  • @Basilevs:我上面的建议不会影响“列定义”(就模式而言)——仅影响其值的语义定义。至于创建一个“reversed index”,我不完全确定你的意思:MySQL可以在either方向遍历索引,它只是不能遍历一个关键部分在一个方向上,另一个关键部分在相反方向上。
  • @RajanRaj:如果可能的话,我真的强烈建议您尝试I suggested above 的方法。
猜你喜欢
  • 2012-03-14
  • 2021-03-30
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 2011-04-06
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多