Порядок за стовпцем повинен мати покажчик чи ні?


35

До таблиці я додав індекси, які використовуються для пошуку результатів. Я показую результати за замовленням ASC або DESC. Отже, цей стовпець повинен мати індекс чи ні? У мене на цій таблиці є ще 2 індекси. Як буде впливати на ефективність, вносячи чи не вносячи індекс до цього стовпця?


2
Будь ласка, опублікуйте запит
RolandoMySQLDBA

Відповіді:


26

Так, MySQL може використовувати індекс на стовпчиках В ЗАМОВЛЕННІ ПО (за певних умов). Однак MySQL не може використовувати індекс для змішаного ASC, DESC порядку за допомогою ( SELECT * FROM foo ORDER BY bar ASC, pants DESC). Спільний доступ до запиту та CREATE TABLE допоможе нам детальніше відповісти на ваше запитання.

Підказки щодо оптимізації пропозицій ORDER BY: http://dev.mysql.com/doc/refman/5.1/uk/order-by-optimization.html

Редагувати 21.01.2012 8:53

Були запитання щодо джерела мого твердження про використання індексу зі змішаним ASC / DESC в ORDER BY. З документації ЗАМОВЛЕННЯ Оптимізацією :

У деяких випадках MySQL не може використовувати індекси для вирішення порядку ORDER BY, хоча він все ще використовує індекси для пошуку рядків, які відповідають умові WHERE. До таких випадків належать:

...

Ви змішуєте ASC і DESC:

ВИБІР * З Т1 ЗАМОВЛЕННЯ key_part1 DESC, key_part2 ASC;

...

Також у CREATE INDEX ключове слово DESC не має сенсу

Специфікація index_col_name може закінчуватися ASC або DESC. Ці ключові слова дозволені для майбутніх розширень для визначення сховища зростаючої чи низхідної індексів. В даний час вони розбираються, але ігноруються; Значення індексу завжди зберігаються у порядку зростання.


3
"MySQL не може використовувати індекс для змішаних ASC, DESC" . Довідка для цього?
ypercubeᵀᴹ

CREATE INDEX idx_foo ON foo(bar ASC, pants DESC);повинні працювати.
Френк Хайкенс

Моє джерело - це документація mysql, пов'язана з моєю відповіддю. Шукати "суміш".
Аарон Браун

3
MySQL аналізує asc & Desc у CREATE INDEX, але ігнорує їх. Покажчики завжди зберігаються у порядку зростання. dev.mysql.com/doc/refman/5.5/uk/create-index.html
Аарон Браун

1
Нове з MySQL 8.0 : Тепер він може використовувати суміш, ASCі DESC якщо у INDEXцієї ж суміші.
Рік Джеймс

4

Для тих, хто цікавиться відповіддю, як це стосується PostgreSQL, відповідь - так, буде використаний індекс. Відповідно до документації PostgreSQL, планувальник запитів "розгляне задоволення специфікації ORDER BY або скануванням доступного індексу, який відповідає специфікації, або скануванням таблиці у фізичному порядку та виконуючи явний сортування". Це означає, що якщо є індекс, який планувальник може використовувати, це зробить, відмовившись від виконання сортування після отримання відповідних рядків.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.