проблема порядка следования результатов запроса mysql - PullRequest
0 голосов
/ 09 июля 2011

У меня есть таблица с этими полями: идентификатор пользователя, время входа, дата рождения
Мне нужно, чтобы ВСЕ пользователи между датами рождения X и Y заказывали с последним вошедшим первым.

SELECT * 
FROM table 
WHERE birtdate BETWEEN x AND Y 
ORDER BY logintime DESC

Если бы я определил индекс только для birtdate, mysql использовал бы сортировку файлов, чтобы упорядочить результаты, которых я хотел бы избежать (таблица становится большой, запрос популярен). Определение индекса (logintime, birthdate) не имеет смысла для меня, так как logintime даже не указан в предложении WHERE (я ограничиваю только результат, установленный birthdate)

Какие-нибудь элегантные решения в MySQL?

Ответы [ 3 ]

1 голос
/ 09 июля 2011

Добавление индекса на birthdate,logintime должно улучшить ваш запрос, но у него есть свои недостатки.Я полагаю, что logintime (как следует из его названия) часто меняется, поэтому движок базы данных должен обновить базовый индекс, что, в свою очередь, приведет к фрагментации индекса.
Я не вижу большой проблемы с сортировкой файлов, если ваш запрос достаточно избирателени используется индекс birthdate.
Также вы можете попытаться поместить свой запрос в тело хранимой процедуры;в этом случае mysql будет использовать кэш более эффективно по сравнению со специальными запросами.

0 голосов
/ 09 июля 2011

AFAIK, наличие индекса по столбцу не влияет на сортировку , только на поиск - это помогает предложению где , а не заказ по пункту.

РЕДАКТИРОВАТЬ: Перейдите по ссылке @ Darhazer - по сути, это говорит: "ORDER BY может быть удовлетворен индексом"

0 голосов
/ 09 июля 2011

Индекс должен быть birtdate, longtime (сначала вы должны выполнить предложение WHERE, затем порядок), но я не уверен, что он может использовать индекс для сортировки между условиями. Сколько записей нужно отсортировать? Поскольку Query популярен, вы можете использовать memcache или другой механизм кэширования, чтобы обслуживать результаты, не обращаясь к базе данных

...