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

6 Июня 2014
Если вы специально не следите за этим, вы можете часто заставлять SQL-сервер выполнять неявное преобразование типов данных.

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

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

Если в выражениях с использованием оператора WHERE или JOIN существует несовпадение данных в критерии запроса, то преобразование данных может быть применено к целому столбцу данных, а не к конкретному значению.
SQL-сервер иногда может это делать, чтобы убедиться что критерий запроса выполнен корректно.
«Иногда» означает, что в каждой версии SQL-сервера может быть разная реализация этого момента.
Когда вам нужно оптимизировать процедуру или запрос – приглядывайте за типами данных. В особенности это полезно, если вы контролируете код, написанный кем-то другим.
sql server
По материалам с сайта idera.com, Glenn Berry’s SQL Performance, SQLSoldier
Получить консультацию специалиста