Лента постов канала Senior SQL Developer (@seniorsql) https://t.me/seniorsql Изучаем SQL. По всем вопросам: @adv_and_pr ru https://linkbaza.com/catalog/-1001468396285 Fri, 15 Aug 2025 19:17:54 +0300
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Thu, 14 Aug 2025 23:53:03 +0300
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Wed, 13 Aug 2025 22:10:31 +0300
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Tue, 12 Aug 2025 23:44:55 +0300
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Mon, 11 Aug 2025 22:36:14 +0300
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Sun, 10 Aug 2025 23:39:07 +0300
Оптимизация SQL-запросов в Oracle (ч.3)

Соединение таблиц (JOIN's) по ключам

1.
Не используйте соединение по неравенству полей (пример 1).

2. Не используйте преобразование данных в ключах соединения таблиц (пример 2).

3. Минимизируйте использование в качестве ключей атрибутов, связи по которым выполняются по принципу "многие-ко-многим".

4. Не используйте соединение по текстовым полям (с типом VARCHAR2 / CLOB / LONG).

5. Не используйте оператор OR в условии соединения таблиц. При необходимости связать одновременно по условию из разных таблиц лучше сделать 2 отдельных join'a, и затем связать их результат в select'е (пример 3).
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Sat, 09 Aug 2025 22:33:07 +0300
Оптимизация SQL-запросов в Oracle (ч.4)

Правильный выбор операторов

1.
Вместо использования оператора IN для проверки наличия значения в списке, можно использовать оператор EXISTS. Оператор EXISTS останавливается при первом совпадении, в то время как оператор "IN" выполняет полное сканирование списка значений (пример 1).

2. Не используйте оператор LIKE там, где можно использовать точное определение значения через равенство либо использовать справочник для определения по идентификаторам (пример 2).

3. Не используйте оператор UNION, если не требуется удаление дубликатов при соединении таблиц. Достаточно использовать UNION ALL (пример 3).
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Fri, 08 Aug 2025 23:18:41 +0300
Оптимизация SQL-запросов в Oracle (ч.5)

Использование CTE
Общая таблица выражений, или Common Table Expression (CTE)
- это временная именованная подзапросная таблица, которая может быть использована внутри основного запроса или другой CTE. Она предоставляет более читабельный и модульный способ написания сложных запросов.

CTE может быть использован для оптимизации запросов в Oracle по нескольким причинам:

Улучшение читабельности: CTE позволяет разбить сложный запрос на более мелкие логические блоки, что делает его более понятным и легким для поддержки и отладки. Кроме того, CTE может быть именована, что дает возможность повторно использовать ее в других частях запроса.

Уменьшение повторения кода: Если одна и та же логика используется в нескольких частях запроса, то ее можно вынести в CTE и использовать ее в разных частях запроса. Это позволяет избежать дублирования кода и упрощает его поддержку.

Улучшение производительности: Использование CTE может помочь оптимизатору запросов принять лучшие решения о плане выполнения запроса. Оптимизатор может использовать информацию о CTE для принятия решений о порядке выполнения операций и выборе оптимальных индексов.

Рекурсивные запросы: CTE также может использоваться для написания рекурсивных запросов, которые требуют выполнения запроса на основе его собственных результатов. Это особенно полезно для работы с иерархическими данными, такими как деревья или графы.

Однако следует помнить, что использование CTE может иметь некоторые ограничения и потребовать дополнительных ресурсов. Например, если CTE используется несколько раз внутри запроса, то каждый раз будет выполнен полный запрос CTE. Поэтому необходимо тщательно оценить выгоду от использования CTE и убедиться, что она превышает затраты на ее выполнение.

Пример использования и синтаксис на фото.
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Thu, 07 Aug 2025 22:24:17 +0300
Оптимизация SQL-запросов в Oracle (ч.6)

1. Использование материализованных представлений

Материализованные представления (Materialized Views или MV)
– это представления, которые хранятся как физические таблицы и могут автоматически обновляться при изменении данных. Использование индексированных представлений может значительно улучшить производительность запросов, особенно для запросов с большими объемами данных.

Если использование индексированных представлений в вашей БД ограничено, их можно заменить на обычные предрасчетные таблицы, обновление которых настраивается с помощью ETL-инструментов.

2. Минимизация использования множественных вложенных подзапросов

Множественные вложенные подзапросы могут быть плохой практикой из-за следующих причин:

- Низкая производительность: каждый подзапрос будет выполняться отдельно, что может привести к повышенной нагрузке на сервер базы данных и увеличению времени выполнения запроса.

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

- Ограниченность возможностей оптимизации: при использовании множественных вложенных подзапросов оптимизатор базы данных может иметь ограниченные возможности для оптимизации запроса и выбора оптимального плана выполнения.

Как вариант, вложенные подзапросы можно легко заменить на CTE.
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Wed, 06 Aug 2025 19:51:35 +0300
Оператор BETWEEN

Оператор BETWEEN используется для извлечения данных из диапазона значений.
Он используется в операторе WHERE оператора SELECT, UPDATE или DELETE.

Оператор BETWEEN выбирает значения в определенном диапазоне, включая границы диапазона.

Синтаксис оператора BETWEEN выглядит следующим образом:

SELECT column_name(s)
FROM table_name
WHERE column_name B
ETWEEN value1 AND value2;

В этом операторе column_name - это имя столбца, из которого вы хотите извлечь данные. table_name - это имя таблицы, которая содержит столбец. Value1 и value2 - это соответственно нижний и верхний пределы диапазона.

#это_база
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Tue, 05 Aug 2025 23:57:10 +0300
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Mon, 04 Aug 2025 22:40:03 +0300
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Sat, 02 Aug 2025 22:29:10 +0300
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Thu, 31 Jul 2025 15:51:08 +0300
Оптимизация SQL-запросов в Oracle (ч.7)

Использование подсказок HINT

Подсказки HINT позволяют указывать оптимизатору базы данных конкретные методы выполнения запросов.
Например, можно указать оптимизатору использовать определенный тип JOIN или выбрать определенный индекс.

1. Если база данных и сервер позволяют, можно использовать пар</i>аллельное выполнение запросов для распределения нагрузки и ускорения выполнения запросов.

2. Мong>ожно указать оптимизатору использовать конкретный индекс или объединение.

3. Можно использовать множество других подсказок (они на фото).

Однако следует быть осторожным при использовании подсказок HINT, поскольку неправильное использование может привести к нежелательным результатам.
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Wed, 30 Jul 2025 23:26:19 +0300
SQL Server: DATEFROMPARTS

Функция
DATEFROMPARTS принимает в качестве параметров год, месяц и день и возвращает значение даты.

Синтаксис функции следующий:
DATEFROMPARTS ( year, month, day )

Функция принимает следующие параметры:
- year - (целое число);
- month - (целое число от 1 до 12);
- day - (целое число от 1 до 31).
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Tue, 29 Jul 2025 22:00:23 +0300
Функция WEEK в MySQL

Функция WEEK используется для извлечения номера недели из даты.

Базовый синтаксис функции выглядит следующим образом:
WEEK( date_value, [ mode ] )

- date_value - значение даты или даты/времени, из которого извлекается неделя.
- mode - Необязательный. Он используется для указания дня недели. Это может быть один из следующих вариантов:

Примечание:
1.
Функция WEEK возвращает значение от 0 до 53 или от 1 до 53 в зависимости от указанного режима.
2. Если вы используете MySQL 4.0.14+, а режим не указан, функция WEEK будет использовать значение в системной переменной default_week_format в качестве режима.
3. Если вы используете версию MySQL, которая старше 4.0.14, а режим не указан, функция WEEK будет использовать 0 в качестве режима.
4. Функция WEEKOFYEAR возвращает то же самое, что и функция WEEK с синтаксисом WEEK (date_value, 3).
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Mon, 28 Jul 2025 23:13:24 +0300
Функция DATE_SUB

Функция DATE_SUB используется для вычитания определенного количества времени из заданной даты.

Синтаксис функции выглядит следующим образом:
DATE_SUB(date, INTERVAL value unit)

- date - дата, из которой нужно вычесть значение времени;
- value - количество времени, которое нужно вычесть;
- unit - единица измерения времени.
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Sun, 27 Jul 2025 21:20:20 +0300
Функции LOCALTIMESTAMP и LOCALTIME

Функция LOCALTIMESTAMP и LOCALTIME в MySQL используются для получения текущего времени на сервере базы данных. Как следует из названия, эти функции возвращают локальное время, которое находится на сервере базы данных.

LOCALTIME возвращает текущее время в формате HH:MM:SS, а LOCALTIMESTAMP возвращает текущую дату и время в формате YYYY-MM-DD HH:MM:SS. Обе функции могут быть использованы в качестве значения по умолчанию для столбцов таблицы.
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Fri, 25 Jul 2025 23:49:38 +0300
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Fri, 25 Jul 2025 18:25:57 +0300
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Thu, 24 Jul 2025 22:31:24 +0300
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Thu, 24 Jul 2025 18:13:06 +0300
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Wed, 23 Jul 2025 22:08:05 +0300
Подробнее
]]>
https://linkbaza.com/catalog/-1001468396285 Tue, 22 Jul 2025 23:48:32 +0300
Подробнее
]]>