powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Составной индекс
14 сообщений из 14, страница 1 из 1
Составной индекс
    #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
Составной индекс
    #40101593
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скорее всего достаточно одного только по Filed1
Ну или если он недостаточно селективный, то два (с Field1 в первой позиции)
...
Рейтинг: 0 / 0
Составной индекс
    #40101604
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW
Если условия на выборку используются только по полям Field1 ANS Field2 или Field1 AND Field3
А сами условия какие? Всегда строго на равенство, или по диапазону тоже?
...
Рейтинг: 0 / 0
Составной индекс
    #40101632
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft
А сами условия какие? Всегда строго на равенство, или по диапазону тоже?

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

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

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

Неожиданно.
Если использовать только Filed2, то может быть выбрано несколько записей (1-4), потом нужно будет эти запаси обычным перебором отобрать по полю Field1. Если ключ по Field1 и Filed2 то всегда будет одна запись.
Если отобрать записи по ключу Filed3, то можем получить несколько тысяч, десятков тысяч лишних записей. Потом нужно будет эти записи обычным перебором отобрать по полю Field1.
Неужели это быстрее чем по ключу?
Я думал, что составной ключ лучше. Можете пояснить почему только индексы по полям Filed2 и Filed3?
...
Рейтинг: 0 / 0
Составной индекс
    #40101943
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
miksoft,
Уточняю.
Если использовать только Filed2, то может быть выбрано одна запись в 96% случаев, 2 - 2% и 3 - 2%, потом нужно будет эти запаси обычным перебором отобрать по полю Field1. Ок, может и получим выигрыш.
Если отобрать записи по ключу Filed3, то можем получить от тысяч до сотен тысяч записей. Потом нужно будет эти записи обычным перебором отобрать по полю Field1. То есть, всегда проверить поле Field1 без индекса для 1 000-1 000 000 записей.
Неужели это быстрее чем по ключу?
Я думал, что составной ключ лучше. Можете пояснить почему только индексы по полям Filed2 и Filed3?
...
Рейтинг: 0 / 0
Составной индекс
    #40101947
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergiiW
Если Filed1 AND Filed3 - от тысяч до сотен тысяч.
SergiiW
Если отобрать записи по ключу Filed3, то можем получить несколько тысяч, десятков тысяч лишних записей. Потом нужно будет эти записи обычным перебором отобрать по полю Field1.
Неужели это быстрее чем по ключу?
Зависит от того, как соотносится первое со вторым.
И еще от массы факторов.
Например, если кэша гарантированно хватает для размещения всех индексов и если таблица только читается, но не пишется, то (Filed1, Filed3) скорее всего будет быстрее.
Пробуйте.
...
Рейтинг: 0 / 0
Составной индекс
    #40101950
SergiiW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы всем. Буду пробовать.
...
Рейтинг: 0 / 0
Составной индекс
    #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
14 сообщений из 14, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Составной индекс
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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