Изучаем SQL.
По всем вопросам:
@adv_and_pr
Информация о канале обновлена 16.08.2025.
Изучаем SQL.
По всем вопросам:
@adv_and_pr
Не используйте соединение по неравенству полей (пример 1).
2. Не используйте преобразование данных в ключах соединения таблиц (пример 2).
3. Минимизируйте использование в качестве ключей атрибутов, связи по которым выполняются по принципу "многие-ко-многим".
4. Не используйте соединение по текстовым полям (с типом VARCHAR2 / CLOB / LONG).
5. Не используйте оператор OR в условии соединения таблиц. При необходимости связать одновременно по условию из разных таблиц лучше сделать 2 отдельных join'a, и затем связать их результат в select'е (пример 3).
Вместо использования оператора IN для проверки наличия значения в списке, можно использовать оператор EXISTS. Оператор EXISTS останавливается при первом совпадении, в то время как оператор "IN" выполняет полное сканирование списка значений (пример 1).
2. Не используйте оператор LIKE там, где можно использовать точное определение значения через равенство либо использовать справочник для определения по идентификаторам (пример 2).
3. Не используйте оператор UNION, если не требуется удаление дубликатов при соединении таблиц. Достаточно использовать UNION ALL (пример 3).
- это временная именованная подзапросная таблица, которая может быть использована внутри основного запроса или другой CTE. Она предоставляет более читабельный и модульный способ написания сложных запросов.
CTE может быть использован для оптимизации запросов в Oracle по нескольким причинам:
Улучшение читабельности: CTE позволяет разбить сложный запрос на более мелкие логические блоки, что делает его более понятным и легким для поддержки и отладки. Кроме того, CTE может быть именована, что дает возможность повторно использовать ее в других частях запроса.
Уменьшение повторения кода: Если одна и та же логика используется в нескольких частях запроса, то ее можно вынести в CTE и использовать ее в разных частях запроса. Это позволяет избежать дублирования кода и упрощает его поддержку.
Улучшение производительности: Использование CTE может помочь оптимизатору запросов принять лучшие решения о плане выполнения запроса. Оптимизатор может использовать информацию о CTE для принятия решений о порядке выполнения операций и выборе оптимальных индексов.
Рекурсивные запросы: CTE также может использоваться для написания рекурсивных запросов, которые требуют выполнения запроса на основе его собственных результатов. Это особенно полезно для работы с иерархическими данными, такими как деревья или графы.
Однако следует помнить, что использование CTE может иметь некоторые ограничения и потребовать дополнительных ресурсов. Например, если CTE используется несколько раз внутри запроса, то каждый раз будет выполнен полный запрос CTE. Поэтому необходимо тщательно оценить выгоду от использования CTE и убедиться, что она превышает затраты на ее выполнение.
Пример использования и синтаксис на фото.
– это представления, которые хранятся как физические таблицы и могут автоматически обновляться при изменении данных. Использование индексированных представлений может значительно улучшить производительность запросов, особенно для запросов с большими объемами данных.
Если использование индексированных представлений в вашей БД ограничено, их можно заменить на обычные предрасчетные таблицы, обновление которых настраивается с помощью ETL-инструментов.
2. Минимизация использования множественных вложенных подзапросов
Множественные вложенные подзапросы могут быть плохой практикой из-за следующих причин:
- Низкая производительность: каждый подзапрос будет выполняться отдельно, что может привести к повышенной нагрузке на сервер базы данных и увеличению времени выполнения запроса.
- Сложность чтения и понимания: чем больше вложенных подзапросов, тем сложнее становится чтение и понимание запроса. Это может затруднить поддержку и обслуживание кода в будущем.
- Ограниченность возможностей оптимизации: при использовании множественных вложенных подзапросов оптимизатор базы данных может иметь ограниченные возможности для оптимизации запроса и выбора оптимального плана выполнения.
Как вариант, вложенные подзапросы можно легко заменить на CTE.
Он используется в операторе WHERE оператора SELECT, UPDATE или DELETE.
Оператор BETWEEN выбирает значения в определенном диапазоне, включая границы диапазона.
Синтаксис оператора BETWEEN выглядит следующим образом:
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
В этом операторе column_name - это имя столбца, из которого вы хотите извлечь данные. table_name - это имя таблицы, которая содержит столбец. Value1 и value2 - это соответственно нижний и верхний пределы диапазона.
#это_база
Владелец канала не предоставил расширенную статистику, но Вы можете сделать ему запрос на ее получение.
Также Вы можете воспользоваться расширенным поиском и отфильтровать результаты по каналам, которые предоставили расширенную статистику.
Также Вы можете воспользоваться расширенным поиском и отфильтровать результаты по каналам, которые предоставили расширенную статистику.
Подтвердите, что вы не робот
Вы выполнили несколько запросов, и прежде чем продолжить, мы ходим убелиться в том, что они не автоматизированные.