Основные операторы SQL, которые сэкономят ваше время

Год подходит к концу, и в этом последнем посте 2021 года я оставляю восемь небольших советов, которые могут сэкономить вам время в повседневной жизни программиста.
Некоторые из них являются основными, в то время как другие могут быть немного сложными. Но я думаю, что они удобны, поэтому, не теряя времени, давайте начнем.
1. Поиск повторяющихся строк по имени столбца
С помощью этого простого запроса мы можем получить список строк с одинаковым значением, указанным в поле column_name.
Кроме того, мы можем увидеть, сколько раз они дублируются.
2. Показать индексы схемы базы данных
Хотя это то, что вы можете увидеть в своем клиенте базы данных, мы также можем сделать это с помощью оператора SQL.
3. Показать N самых дорогих запросов
Это предложение, которое кажется очень сложным, но таковым не является, показывает, какие предложения потребовали больше всего времени для выполнения ядра базы данных.
Полезно знать, какие операторы SQL нуждаются в проверке, чтобы увидеть, можно ли их оптимизировать.
4. Показать, используется ли индекс или нет
Обычно количество индексов в базе данных со временем увеличивается.
Сколько раз вы проверяли, действительны ли эти индексы? Индексы занимают дисковое пространство, которое может быть значительным в огромных таблицах. Поэтому всегда удобно проверить, какие из них используются, чтобы понять, удобно их удалять или нет.
Во-первых, вам нужно включить мониторинг вашего индекса:
ALTER INDEX INDEX_NAME MONITORING USAGE;
Если вы хотите отключить мониторинг, вам нужно всего лишь выполнить следующее предложение:
ALTER INDEX INDEX_NAME NOMONITORING USAGE;
Теперь вы можете использовать данные мониторинга, обратившись к представлению v$object_usage:
- Поле
START_MONITORINGуказывает, когда начался мониторинг. - Поле
MONITORINGуказывает, отслеживается индекс или нет. - Поле
USEDуказывает словом «YES», если индекс использовался с момента активации мониторинга.
Перед удалением любого индекса, который, по вашему мнению, не используется, рекомендуется оставить мониторинг включенным на разумное время и учесть, что могут быть пакетные процессы, которые используют индекс и выполняются нечасто.
5. Используйте count (1) вместо count (*)
Используйте count(1) вместо count(*) всякий раз, когда это возможно. Предложение count(*) учитывает все столбцы таблицы для выполнения вычислений, вместо этого предложение count(1) принимает только первый столбец.
Обратите внимание, что результат не меняется, если вы используете count (*) или count (1).
Использование count(1) заставляет механизм базы данных использовать меньше ресурсов и работать быстрее. С маленькими таблицами разница не будет заметна, но если вы работаете с огромными таблицами, такие вещи заметно влияют на производительность ваших запросов.
*Примечание: это действительно только в том случае, если
6. Условные операторы
Вы можете использовать класс case when, эквивалентный if-then-else других языков программирования, для написания условий в ваших запросах.
7. Общие табличные выражения (CTE)
Этот тип выражения позволяет вам определить временный именованный набор результатов, который временно доступен в памяти в области выполнения инструкции, такой как SELECT, INSERT, UPDATE, DELETE или MERGE.
Это предложение также можно использовать в операторе CREATE VIEW как часть оператора SELECT, который его определяет.
CTE в основном позволяет заменять подзапросы и табличные переменные.
В случае с подзапросами CTE не дает вам никакого преимущества в производительности, но позволяет иметь более упорядоченный и чистый код, что облегчает его читаемость.
В случае с табличными переменными CTE дает лучшую производительность в запросе, поэтому всегда будет более целесообразным вариантом.
Этот небольшой пример может не показать потенциал CTE, но представьте себе очень большие и сложные подзапросы и то, как будет выглядеть код.
8. СВЕРХ И СВЕРХ (РАЗДЕЛЕНИЕ ПО)
Предложение OVER позволяет вам получить агрегированную информацию без использования GROUP BY, избегая многих его осложнений. Например, вы можете получить набор строк и получить вместе с ними агрегированные данные.
Предложение OVER предоставляет весь набор результатов для агрегирования, но вы можете разбить набор результатов на разделы, используя предложение PARTITION BY.
В этом примере разделение осуществляется клиентом, и каждое «окно» одного клиента будет обрабатываться отдельно от каждого другого «окна».
Заключение
Мы собрали небольшой набор фрагментов кода SQL, которые обычно экономят мне время или помогают в повседневной работе.
Некоторые из них можно применять в SQL-сервере, а другие — в Oracle, но обычно вы можете найти эквивалент для любого другого ядра базы данных.
Если вам понравилась эта статья, рассмотрите возможность подписки на Medium через мой профиль. Спасибо!