Упорядочить по двум полям - Индексирование - PullRequest
1 голос
/ 18 сентября 2011

Итак, у меня есть таблица со всеми пользователями и их значениями. И я хочу заказать их после того, сколько "денег" они получили. Проблема в том, что у них есть деньги в двух отдельных полях: 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, отображается «Использование сортировки файлов», и мне интересно, есть ли способ оптимизировать его?

1 Ответ

1 голос
/ 18 сентября 2011

Поскольку вы хотите выполнить сортировку по производному значению (то, которое должно быть рассчитано для каждой строки), MySQL не может использовать индекс, чтобы помочь с упорядочением.

Единственное решение, которое я вижу, - создать дополнительный total_money или аналогичный столбец, а при обновлении money или bank тоже обновите это значение. Вы можете сделать это в коде своего приложения или, если хотите, сделать это в MySQL с помощью триггеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...