powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Методы оптимизации запросов
18 сообщений из 18, страница 1 из 1
Методы оптимизации запросов
    #39733743
ukman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я решил написать статью о самых простых методах оптимизации SELECT запросов к реляционным БД из разряда:

Создать индекс на все foreign key поля, если количество записей в таблице будет превышать несколько тысяч

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

Поделитесь своими рецептами, что вам помогает в большинстве простых случаев оптимизации.
...
Рейтинг: 0 / 0
Методы оптимизации запросов
    #39733746
Озверин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ukman, то есть вы хотели, чтобы вам написали статью?
...
Рейтинг: 0 / 0
Методы оптимизации запросов
    #39733754
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Стараться не делать представлений с вычислениями и группировками.
2. Не делать условий с вычислениями (а-ля X > Y+Z) и преобразованиями/конвертациями данных.
3. Избегать конструкций OR. Проверять область их действия. Иногда неверное указание скобок может "взорвать" запрос.
4. Если в запросе фигурируют пользовательские ф-ции - посмотреть на их код.
5. Избегать работу с NULL, т.к. оно не индексируется.
6. Если позволяет логика - для SELECT - запросов указывать with(nolock) для каждой таблицы.
7. Избегать запросов where ID in (select id from .....). Применяйте exists(select * from a where a.id = ВнешняяТаблица.id)
...
Рейтинг: 0 / 0
Методы оптимизации запросов
    #39733791
Фотография Alex_496
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ukman,

Ицик Бен Ган, Федор Самородов, Сергей Олонцев и Дмитрий Коростылев и ряд других - у них написано т рассказано много премного.

Для OLTP и для DWH рекомендации разные.
Платформы тоже различия рекомендаций. Например, для MSSQL таблицам разумные индексы для аналитики помогут, а на Exadata для тех же обьемов таблиц индексы - что слону дробины
---
В плане исполнения запросов смотреть на вес логических чтений
...
Рейтинг: 0 / 0
Методы оптимизации запросов
    #39733807
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Создать индекс на все foreign key поля, если количество записей в таблице будет превышать несколько тысяч
Было у меня такое.
База позволяла использоватся множеством компаний и в каждой таблице был проставлен company_id ссылающимся на таблицу с единственной записью о нашей компании.
И в каждой таблице было по индексу на эту company_id.
Ведь вроде формально все правильно было сделано, но нулевой пункт был нарушен - используй мозги.
...
Рейтинг: 0 / 0
Методы оптимизации запросов
    #39734097
Cane Cat Fisher
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo6. Если позволяет логика - для SELECT - запросов указывать with(nolock) для каждой таблицы
Это надо сильно обосновать, что логика позволяет. NOLOCK - это ведь READ UNCOMMITED, вся изоляция транзакций коту под хвост.
...
Рейтинг: 0 / 0
Методы оптимизации запросов
    #39734167
ukman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L_argo,

Спасибо за обстоятельный ответ

Прочитал про 3-ий пункт- действительно не знал, что OR такой "вредный"

7-ой пункт прочитал, пишут, что актуально для MSSQL и MySQL, пока не успел на них попробовать. Я больше по PostgreSQL, на нем попробовал несколько вариантов, запросов с id in (select...) и exists(select...), но тут даже планы запросов совпадают.

Интересно как это на Oracle...
...
Рейтинг: 0 / 0
Методы оптимизации запросов
    #39734171
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherЭто надо сильно обосновать, что логика позволяет. NOLOCK - это ведь READ UNCOMMITED, вся изоляция транзакций коту под хвост.Да пофиг на эту изоляцию чуть менее, чем всегда. :)
...
Рейтинг: 0 / 0
Методы оптимизации запросов
    #39734174
ukman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cane Cat Fisher,

Да, согласен надо учитывать, но часто изоляция переоценена, если запрос строит OLAP запрос, где важны порядки цифр (процент затрат по бюджету проекта), то конкретное изменение на 0.01% из-за того, что какой-то значение попало из "неправильной" транзакции- не играет большой роли.
...
Рейтинг: 0 / 0
Методы оптимизации запросов
    #39745226
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ukmanЯ решил написать статью о самых простых методах оптимизации SELECT запросов к реляционным БД из разряда:

Создать индекс на все foreign key поля, если количество записей в таблице будет превышать несколько тысяч

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

Поделитесь своими рецептами, что вам помогает в большинстве простых случаев оптимизации.

Не забудь потом дать ссылку тут, что б я поржал...
...
Рейтинг: 0 / 0
Методы оптимизации запросов
    #39745234
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нну... не ... нельзя так оставлять...

автор1. Стараться не делать представлений с вычислениями и группировками.

Делать-то представления можно любые, главное -- не использовать их потом...


автор2. Не делать условий с вычислениями (а-ля X > Y+Z) и преобразованиями/конвертациями данных.

И почему бы это? А если пользователь заказал?


автор3. Избегать конструкций OR. Проверять область их действия. Иногда неверное указание скобок может "взорвать" запрос.

Вообще, лучше избегать конструкций. И вообще лучше SQL не писать, а если писать -- главное, не выполнять...
А то неверное указание конструкций может взорвать что-нибудь...


автор4. Если в запросе фигурируют пользовательские ф-ции - посмотреть на их код.

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

автор5. Избегать работу с NULL, т.к. оно не индексируется.

Ну, в разных СУБД по-разному, если в Оракл оно не индексируется, это ещё не повод...

автор6. Если позволяет логика - для SELECT - запросов указывать with(nolock) для каждой таблицы.

А если логика не позволяет, или её вообще нет -- лучше вообще запрос не писать.

автор7. Избегать запросов where ID in (select id from .....). Применяйте exists(select * from a where a.id = ВнешняяТаблица.id)

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

На последок дам один единственный совет, зато правильный на 100%:

Код: plaintext
1.
2.
Не пытайтесь описать производительность запросов какими-то правилами, и не пытайтесь давать универсальные советы по написанию запросов.
Все такие правила не работают.
...
Рейтинг: 0 / 0
Методы оптимизации запросов
    #39745238
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cane Cat FisherL_argo6. Если позволяет логика - для SELECT - запросов указывать with(nolock) для каждой таблицы
Это надо сильно обосновать, что логика позволяет. NOLOCK - это ведь READ UNCOMMITED, вся изоляция транзакций коту под хвост.

Да главное, что к производительности запроса это никакого отношения не имеет вообще...
...
Рейтинг: 0 / 0
Методы оптимизации запросов
    #39745293
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

И к чему тут целая гора саркастических каментов без какой либо аргументации ?
Просто поумничать ?

И где советы по сабжу в Вашем исполнении ? Хоть один ?

Ан нет...... Парочка все же есть:
"Делать-то представления можно любые, главное -- не использовать их потом"
"И вообще лучше SQL не писать".
...
Рейтинг: 0 / 0
Методы оптимизации запросов
    #39745310
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argoMasterZiv,

И к чему тут целая гора саркастических каментов без какой либо аргументации ?
Просто поумничать ?


Да, а что?

Ну и там в конце ещё есть совет. Главный.
...
Рейтинг: 0 / 0
Методы оптимизации запросов
    #39745488
Фотография Alex_496
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по-возможности, избегать UNION и DISTINCT,

ORDER BY выполнять в клиентском приложении типа Excel и Win Forms
...
Рейтинг: 0 / 0
Методы оптимизации запросов
    #39745506
L_argo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по-возможности, избегать UNIONНу.... тут неоднозначно.
Иногда сложный запрос проще разбить на два более простых с UNION.
Они будут более читабельны и планы у них могут быть оптимальнее.
Т.е. надо смотреть по ситуации.
...
Рейтинг: 0 / 0
Методы оптимизации запросов
    #39745576
Фотография Alex_496
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
L_argo,

по возмодности <> категорически
...
Рейтинг: 0 / 0
Методы оптимизации запросов
    #39745651
Фотография Megabyte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_496ORDER BY выполнять в клиентском приложении типа Excel и Win Forms
Сейчас насоветуют...
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Методы оптимизации запросов
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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