Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / индексы и все о них / 6 сообщений из 6, страница 1 из 1
31.10.2008, 16:45
    #35628650
spyfox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексы и все о них
Объясните пожалуйста работу индексов:
Есть табличка:
id serial PRIMARY KEY,
parent_id int4 NOT NULL,
name varchar(255),
is_main boolean NOT NULL,
sort_order int4 NOT NULL

SELECT * FROM table WHERE is_main = true AND parent_id IS NULL ORDER BY sort_order, name;

Меня инетерсует слудеющее:
Если создать индекс на (is_main, parent_id) - для выборки и на (sort_order, name) - для сортировки, то будет ли использоваться 2 индекса при запросе (один для выбоки второй для сортировки)? Или будет использован только первый индекс для выбоки, а для сортировки индекс использован не будет?
...
Рейтинг: 0 / 0
31.10.2008, 18:34
    #35629090
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексы и все о них
spyfox wrote:


> Если создать индекс на (is_main, parent_id) - для выборки и на
> (sort_order, name) - для сортировки, то будет ли использоваться 2
> индекса при запросе (один для выбоки второй для сортировки)? Или будет
> использован только первый индекс для выбоки, а для сортировки индекс
> использован не будет?

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

Короче, ответ (примитивно) - нет, будет
использован только первый индекс для выбоки, а для сортировки индекс
использован не будет. Или же наоборот, не будет для фильтраци, а будет
для сортировки.

К тому же если у вас индекс будет эффективно использоваться
для фильтрации, то как правило он будет возвращать небольшое
число записей, которое отсортировать несложно, т.е. там нет
смысла использовать индекс для сортировки (дороже).
И наоборот, если имеет смысл использовать индекс для сортировки,
то это значит, что записей много и, следовательно, сервер
не смог найти хороший индекс для фильтрации.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
01.11.2008, 11:22
    #35629975
spyfox
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексы и все о них
а может ли один индес быть использован как для выборки так и для сортировки?
...
Рейтинг: 0 / 0
01.11.2008, 12:22
    #35630165
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексы и все о них
SELECT * FROM table WHERE is_main = true AND parent_id IS NULL ORDER BY sort_order, name
индекс может выглядеть примерно так
Код: plaintext
CREATE idx_xxx  ON  xxx  (is_main, (parent_id IS NULL) ,sort_order, name)
или
Код: plaintext
CREATE idx_xxx  ON  xxx  (sort_order, name) WHERE is_main = true AND parent_id IS NULL 
при этом, если записей ,скажем, будет 1-2, боюсь, индекс использоваться точно не будет.
...
Рейтинг: 0 / 0
01.11.2008, 12:24
    #35630174
assa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексы и все о них
прастите, главное слово инструкции зобыл :0)
assaиндекс может выглядеть примерно так
Код: plaintext
CREATE INDEX idx_xxx  ON  xxx  (is_main, (parent_id IS NULL) ,sort_order, name)
или
Код: plaintext
CREATE INDEX idx_xxx  ON  xxx  (sort_order, name) WHERE is_main = true AND parent_id IS NULL 
...
Рейтинг: 0 / 0
01.11.2008, 17:17
    #35631035
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
индексы и все о них
spyfox пишет:
> а может ли один индес быть использован как для выборки так и для сортировки?
Да. Но ОБЫЧНО в разное время разными запросами.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / индексы и все о них / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]