Нужны ли индексы для столбцов ORDER BY? - PullRequest
0 голосов
/ 05 декабря 2011

У нас есть запрос, который выглядит следующим образом:

select *
  from foo
 where some_fk_id = <value>
   and modified_date > 'date1'
   and modified_date < 'date2'
 order by modified_date desc;

Нужно ли мне создавать составной индекс для some_fk_id и modified_date в приведенном выше сценарии?

Ответы [ 3 ]

0 голосов
/ 05 декабря 2011

Это зависит от ваших данных, но индекс на updated_date, вероятно, будет хорош как для where, так и для порядка на.

Если условия внешнего ключа дают вам только несколько строк, заказывать будет дешевостроки по дате в любом случае.

0 голосов
/ 05 декабря 2011

Вам не нужно , нужно составной индекс, но удовлетворяющее условию some_fk_id и modified_date, где можно выполнить только с индексами (т. Е. Очень быстро), если вы это сделаете.

Лучше всего посмотреть план запроса и профилировать.

Вы можете просмотреть план запроса, используя EXPLAIN:

EXPLAIN SELECT * FROM foo WHERE some_fk_id=1 AND modified_date > 'date1' AND modified_date < 'date2' ORDER BY modified_date DESC;

Попробуйте его как с составным индексом, так и без него, и посмотрите, с каким планом он придет. Худшее, что может случиться, это filesort - старайтесь избегать этого, если вам нужно быть быстрым.

Самое главное, испытания во время выполнения с запросами, данными и оборудованием, которое вы фактически будете использовать. В вашем конкретном случае может оказаться, что пространство, занимаемое составным индексом, замедлит вас больше, чем просто поиск по записям. Например, если у some_fk_id очень высокая селективность в таблице, индекс второго уровня может не понадобиться.

0 голосов
/ 05 декабря 2011

Не для ORDER BY - применяется к результирующему набору после . Выбираются строки.Возможно, вы захотите рассмотреть один из них, если вы выбираете на основе updated_date на регулярной основе.

Кстати, ваш предоставленный оператор выбирает на модифицированном_дате> два различных значения.Это должен был быть один «>» и один «<»? </p>

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