Co to jest ten tytułowy CONVERT_IMPLICIT ? Czym skutkuje ? Jak wyeliminować ?

O CONVERT_IMPLICIT mówimy wtedy, gdy SQL Server napotka w predykatach (klauzula WHERE lub klauzula JOIN) porównanie dwóch różnych typów danych. Wtedy jedna strona wartości zostanie przekonwertowana na typ danych drugiej strony. Ten proces bardzo obciąża procesor, we/wy i pamięć.

Za każdym razem, gdy funkcja CONVERT_IMPLICIT zostanie uruchomiona przez zapytanie, zwykle zajmuje znacznie więcej zasobów niż w normalnym przypadku. Wykorzystanie procesora, we/wy i pamięci wzrasta. Dodatkowo, jeśli konwersja odbywa się w kolumnie tabeli, wszystkie wartości kolumny zostaną przekonwertowane na nowy typ danych, co spowolni zapytanie proporcjonalnie do rozmiaru tabeli.

Dodatkowo CONVERT_IMPLICIT jest funkcją i za każdym razem, gdy jest używana w kolumnie, również negatywnie wpływa na plan wykonania, nie wybierając optymalnego indeksu dla zapytania.

A jak wyeliminować CONVERT_IMPLICIT?

Najlepiej jest dopasować typy danych kolumn i wartości używanych w zapytaniu, w którym odbywa się porównanie. Zarówno w klauzuli JOIN, jak i WHERE należy się upewnić się, że obie strony porównania mają te same typy danych. To najprostszy i najskuteczniejszy sposób rozwiązania problemu.


Dariusz Brejnak

Od prawie trzydziestu lat jest pasjonatem informatyki, a zwłaszcza dziedzin dotyczących baz danych, hurtowni danych oraz ogólnie rozumianej tematyki BI. Jego druga pasja to fotografia http://dariuszbrejnak.pl