Как несовпадение типов данных может замедлять работу SQL-сервера

6 Июня 2014
Если облака для вас
не просто теория
Широкий спектр услуг
по выделенным северам
и мультиклауд-решениям
Конфигурация VPS и бесплатный тест уже через 2 минуты
Организация вашей IT-инфраструктуры на основе мультиклауд-решения
Если вы специально не следите за этим, вы можете часто заставлять SQL-сервер выполнять неявное преобразование типов данных.

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

Но иногда это может существенно увеличить нагрузку, потому что вместо быстрой и более эффективной операции поиска (seek) может выполняться более «тяжелое» индексное сканирование (index scan) или сканирование по таблице (table scan). Там, где запрос с несовпадающими типами данных и запускаемым индексным сканированием может выполняться иногда и больше минуты, запрос с совпадающими типами данных будет работать меньше секунды.

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

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

Когда вам нужно оптимизировать процедуру или запрос – приглядывайте за типами данных. В особенности это полезно, если вы контролируете код, написанный кем-то другим.

По материалам с сайта idera.com, Glenn Berry’s SQL Performance, SQLSoldier
Получить консультацию специалиста