powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Построение индекса для звпросов с использованием оператора OR
5 сообщений из 5, страница 1 из 1
Построение индекса для звпросов с использованием оператора OR
    #38640172
roman_lenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый!

Поделитесь секретами построения оптимальных индексов для запросов в которых используется оператор OR. Например, есть какае-то упрощённая таблица с кластерным индексом по полю age:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
Table{

    varchar name,

    int age
};

create clustered index AGE on Table(age);



Если выполнять простой запрос вида:

Код: sql
1.
select name from Table where age = 25;



то тут всё просто: СУБД просто найдёт страницу индекса (Index Seek) где age = 25 и вернёт оттуда значения.

Но если есть запрос:

Код: sql
1.
select name from Table where age = 25 OR 33;



То задача усложняется — какой путь выберет СУБД — я не знаю. СУБД, возможно, разделит указанный выше запрос на два:

Код: sql
1.
2.
select name from Table where age = 25;
select name from Table where age = 33;



и выполнит их по отдельности в 2-х различных системных потоках (Threads) и это компенсирует необходимость выполнять 2 запроса последовательно. Но, скорее всего, СУБД выполнит Index Scan — т.е., сканирование всей таблицы целиком, что не есть хорошо...

В общем, что посоветуете? — что делать с этими операторами OR?
...
Рейтинг: 0 / 0
Построение индекса для звпросов с использованием оператора OR
    #38640180
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roman_lenkoВ общем, что посоветуете?
Лично я посоветую идти в раздел своей СУБД, поскольку индексы и способы выполнения
запросов сильно индивидуальная вещь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Построение индекса для звпросов с использованием оператора OR
    #38640183
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
roman_lenkoНо, скорее всего, СУБД выполнитЧто гадать? Возьмите конкретную СУБД и попробуйте.
В любом случае, конкретные ответы могут быть применимы только к конкретным СУБД.

Кстати, я бы посоветовал вместо OR использовать IN.
Код: sql
1.
age IN (25,33)

Мне кажется, что так в абстрактно-потолочной СУБД шансы на использование индекса будут выше.
...
Рейтинг: 0 / 0
Построение индекса для звпросов с использованием оператора OR
    #38640191
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftКстати, я бы посоветовал вместо OR использовать IN.
Код: sql
1.
age IN (25,33)

Мне кажется, что так в абстрактно-потолочной СУБД шансы на использование индекса будут выше.

Ну если уж так говорить, то тогда вообще лучше использовать 2 запроса с union - тут у абстрактно-потолочной СУБД шансов потерять индекс вообще не останется :)
...
Рейтинг: 0 / 0
Построение индекса для звпросов с использованием оператора OR
    #38640195
roman_lenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин — действительно, следовало бы задать это в разделе MSSQL — не додумался сразу. Жаль создавать дубликат темы, но прийдётся. За советы спасибо — натолкнуло на раздумия.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Построение индекса для звпросов с использованием оператора OR
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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