2016-04-24 3 views
-1

Скажем, у меня есть следующий запрос:Индексы Без Где Статья

select col_1, col_2, col_3 
from table 
order by col_1; 

Я только есть индекс по col_1.

Будет ли использоваться здесь индекс? У меня нет предложения where, но у меня есть «Order By», поэтому мне интересно.

Редактировать Часть 2: Притворимся, что у меня есть таблица с 1 миллионом строк.

Редактировать, чтобы обеспечить Контекст Вопрос:

Я читал книгу о администрирования баз данных, и это то, что он сказал:

SELECT last_name, first_name, middle_initial, empno, position 
FROM employee 
WHERE position IN ('MANAGER', 'DIRECTOR', 'VICE PRESIDENT') 
ORDER BY last_Name; 

«Если индекс существует на last_name столбца, запрос может используйте этот индекс и избегайте сортировки ... ".

Итак, я начал думать, что «сортировка» будет быстрее, если я создам индекс в столбце, который я планирую всегда сортировать, даже если остальная часть моего запроса отсутствует, где, группировка, наличие и т. Д.

+1

Проверьте план запроса. – randominstanceOfLivingThing

+1

без использования лимита наиболее эффективным методом было бы полное сканирование таблицы каждый раз для этого запроса. – Lucas

+0

Индексы должны помочь с сортировкой, или так я только что прочитал, поэтому я подумал, что если бы я использовал индекс для запроса, Order By "и no" Where ", он будет использоваться эффективно. – LunchBox

ответ

1

Чтобы прояснить ситуацию, я сделал простую симуляцию.

Во-первых, я создал пустую таблицу:

CREATE TABLE so_test (
    col_1 bigint, 
    col_2 bigint, 
    col_3 bigint 
); 

CREATE INDEX col_1 ON so_test USING btree (col_1); 

и запустить два EXPLAIN запросов:

explain select col_1, col_2, col_3 
from so_test 
order by col_1; 
Index Scan using col_1 on so_test (cost=0.15..66.80 rows=1510 width=24) 
explain select col_1, col_2, col_3 
from so_test 
order by col_2; 
Sort (cost=104.83..108.61 rows=1510 width=24) 
    Sort Key: col_2 
    -> Seq Scan on so_test (cost=0.00..25.10 rows=1510 width=24) 

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

Хотя, чтобы увидеть значительное ускорение от добавления индекса, вы должны использовать запрос с LIMIT.

В будущем вы должны ознакомиться с установщиком запросов postgres и EXPLAIN command. Таким образом, вы получите более быстрые и точные ответы на использование индекса в разных запросах.

+0

Спасибо Леониду! Я знаю, что вы можете ускорить работу с LIMIT, но я просто хотел понять, как индексы влияют на производительность в разных сценариях! У меня примерно 5 месяцев опыта работы с данными, поэтому я довольно неопытен. Спасибо за помощь, я ценю это! – LunchBox

+0

@ LunchBox Я имел в виду, что запрос сортировки с лимитом потребует полного сканирования таблицы, если у вас нет индекса. Поэтому добавление индекса может значительно ускорить такие запросы. Но без лимита postgres придется загружать полный набор данных в любом случае, поэтому разница не будет такой огромной. –

+0

Используя индекс или нет, без ограничений, полное сканирование таблицы будет по-прежнему выполняться для обоих запросов? – LunchBox