Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Составной индекс / 14 сообщений из 14, страница 1 из 1
03.10.2021, 08:54
    #40101576
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
Добрый день!
Есть таблица на 15 млн записей с полями
1. Field1 - number
2. Field2 - number
3. Field3 - number
4. ...
Если условия на выборку используются только по полям Field1 ANS Field2 или Field1 AND Field3, то, вроде, логично делать два составных индекса Field1, Field2 и Field1, Field3. Или лучше делать три отдельных индекса по всем трем полям?
...
Рейтинг: 0 / 0
03.10.2021, 12:21
    #40101593
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
Скорее всего достаточно одного только по Filed1
Ну или если он недостаточно селективный, то два (с Field1 в первой позиции)
...
Рейтинг: 0 / 0
03.10.2021, 13:28
    #40101604
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
SergiiW
Если условия на выборку используются только по полям Field1 ANS Field2 или Field1 AND Field3
А сами условия какие? Всегда строго на равенство, или по диапазону тоже?
...
Рейтинг: 0 / 0
03.10.2021, 17:06
    #40101632
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
miksoft
А сами условия какие? Всегда строго на равенство, или по диапазону тоже?

Всегда строго на равенство.
...
Рейтинг: 0 / 0
03.10.2021, 17:12
    #40101633
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
Вячеслав Любомудров
Скорее всего достаточно одного только по Filed1

Filed1 это, примерно, 1 млн.
Если используются условия Filed1 AND Filed2 в результате только 1 запись.
Если Filed1 AND Filed3 - от тысяч до сотен тысяч.
...
Рейтинг: 0 / 0
03.10.2021, 18:58
    #40101639
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
SergiiW
Filed1 это, примерно, 1 млн.
миллион записей на одно значение или миллион значений?
...
Рейтинг: 0 / 0
03.10.2021, 20:07
    #40101641
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
miksoft
SergiiW
Filed1 это, примерно, 1 млн.
миллион записей на одно значение или миллион значений?

Миллион строк на одно значение в Filed1.
...
Рейтинг: 0 / 0
03.10.2021, 21:36
    #40101649
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
SergiiW
Миллион строк на одно значение в Filed1.
Тогда я бы рассмотрел вариант с двумя отдельными индексами на поля Filed2 и Filed3, без Filed1 вообще.
...
Рейтинг: 0 / 0
04.10.2021, 13:29
    #40101782
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
Ну или с Field1 первым и COMPRESS
...
Рейтинг: 0 / 0
04.10.2021, 21:58
    #40101936
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
miksoft
SergiiW
Миллион строк на одно значение в Filed1.
Тогда я бы рассмотрел вариант с двумя отдельными индексами на поля Filed2 и Filed3, без Filed1 вообще.

Неожиданно.
Если использовать только Filed2, то может быть выбрано несколько записей (1-4), потом нужно будет эти запаси обычным перебором отобрать по полю Field1. Если ключ по Field1 и Filed2 то всегда будет одна запись.
Если отобрать записи по ключу Filed3, то можем получить несколько тысяч, десятков тысяч лишних записей. Потом нужно будет эти записи обычным перебором отобрать по полю Field1.
Неужели это быстрее чем по ключу?
Я думал, что составной ключ лучше. Можете пояснить почему только индексы по полям Filed2 и Filed3?
...
Рейтинг: 0 / 0
04.10.2021, 22:25
    #40101943
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
miksoft,
Уточняю.
Если использовать только Filed2, то может быть выбрано одна запись в 96% случаев, 2 - 2% и 3 - 2%, потом нужно будет эти запаси обычным перебором отобрать по полю Field1. Ок, может и получим выигрыш.
Если отобрать записи по ключу Filed3, то можем получить от тысяч до сотен тысяч записей. Потом нужно будет эти записи обычным перебором отобрать по полю Field1. То есть, всегда проверить поле Field1 без индекса для 1 000-1 000 000 записей.
Неужели это быстрее чем по ключу?
Я думал, что составной ключ лучше. Можете пояснить почему только индексы по полям Filed2 и Filed3?
...
Рейтинг: 0 / 0
04.10.2021, 22:39
    #40101947
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
SergiiW
Если Filed1 AND Filed3 - от тысяч до сотен тысяч.
SergiiW
Если отобрать записи по ключу Filed3, то можем получить несколько тысяч, десятков тысяч лишних записей. Потом нужно будет эти записи обычным перебором отобрать по полю Field1.
Неужели это быстрее чем по ключу?
Зависит от того, как соотносится первое со вторым.
И еще от массы факторов.
Например, если кэша гарантированно хватает для размещения всех индексов и если таблица только читается, но не пишется, то (Filed1, Filed3) скорее всего будет быстрее.
Пробуйте.
...
Рейтинг: 0 / 0
04.10.2021, 22:48
    #40101950
SergiiW
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
Спасибо за ответы всем. Буду пробовать.
...
Рейтинг: 0 / 0
12.10.2021, 19:11
    #40103901
Alexander Anokhin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Составной индекс
SergiiW
miksoft,
Уточняю.
Если использовать только Filed2, то может быть выбрано одна запись в 96% случаев, 2 - 2% и 3 - 2%, потом нужно будет эти запаси обычным перебором отобрать по полю Field1.
...
Я думал, что составной ключ лучше.


Если надо оптимизировать только один конкретный запрос типа такого
Код: plsql
1.
2.
where Field1 = :b1 
  and Field2 = :b2


тогда да, можно составной индекс. Если же возможны запросы
Код: plsql
1.
where Field2 = :b2


тогда индекс только по полю Field2 ну или Field2, Field1
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Составной индекс / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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