Sargability (Search ARGument ABLE) — это возможность SQL-запроса эффективно использовать индекс для фильтрации строк. Запрос считается sargable, когда движок базы данных может применить условие поиска напрямую к индексированному столбцу, что позволяет быстро искать по индексу вместо полного сканирования таблицы.
Когда запрос non-sargable, движок БД не может эффективно использовать индекс и вынужден просканировать каждую строку таблицы. Это приводит к:
Non-sargable условия обычно возникают, когда функции, вычисления или преобразования применяются к индексированным столбцам в предложении WHERE:
-- Non-sargable: функция применена к индексированному столбцу
WHERE YEAR(order_date) = 2024
Другие примеры:
WHERE UPPER(username) = 'JOHN'WHERE salary * 1.1 > 50000WHERE CONVERT(VARCHAR, order_id) = '101'Перепиши условия так, чтобы индексированный столбец остался без преобразований. Перенеси всю логику на другую сторону выражения:
-- Sargable: столбец изолирован, применено условие диапазона
WHERE order_date >= '2024-01-01'
AND order_date < '2025-01-01'
Ключевые принципы:
Всегда пиши предложения WHERE так, чтобы индексированные столбцы оставались без преобразований. Это позволяет оптимизатору запросов эффективно использовать индексы, что резко улучшает производительность на больших объёмах данных.
Sargable запрос позволяет движку БД применить условие поиска непосредственно к индексированному столбцу, что обеспечивает быстрый поиск по индексу вместо полного сканирования таблицы.
Новый — ещё не проверен сообществом
Вы