【问题标题】:Order by two fields - Indexing按两个字段排序 - 索引
【发布时间】:2011-09-18 13:15:14
【问题描述】:

所以我有一张包含所有用户及其价值观的表格。我想在他们得到多少“钱”之后订购它们。问题是他们在两个不同的领域有钱:users.money 和 users.bank。

这是我的表结构:

CREATE TABLE IF NOT EXISTS `users` (
  `id` int(4) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(54) COLLATE utf8_swedish_ci NOT NULL,
  `money` bigint(54) NOT NULL DEFAULT '10000',
  `bank` bigint(54) NOT NULL DEFAULT '10000',
  PRIMARY KEY (`id`),
  KEY `users_all_money` (`money`,`bank`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci AUTO_INCREMENT=100 ;

这是查询:

SELECT id, (money+bank) AS total FROM users FORCE INDEX (users_all_money) ORDER BY total DESC

哪个工作正常,但是当我运行 EXPLAIN 时,它显示“使用文件排序”,我想知道是否有任何方法可以优化它?

【问题讨论】:

    标签: mysql sql database indexing


    【解决方案1】:

    因为您想按派生值(必须为每一行计算的值)排序,所以 MySQL 不能使用索引来帮助排序。

    我能看到的唯一解决方案是创建一个额外的 total_money 或类似列,并在您更新 moneybank 时更新该值。您可以在您的应用程序代码中执行此操作,或者如果您愿意,也可以在 MySQL 中使用触发器执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-19
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 2013-04-26
      相关资源
      最近更新 更多