按两个字段排序 - 索引

时间:2011-09-18 13:15:14

标签: mysql sql database indexing

所以我有一张包含所有用户及其值的表格。而且我想在他们得到多少“钱”之后订购它们。问题是他们在两个单独的领域有钱: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时它会显示“Using filesort”,我想知道是否有任何方法可以优化它?

1 个答案:

答案 0 :(得分:1)

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

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