quinta-feira, 24 de julho de 2014

SQL: COUNT X COUNT_BIG desvendando o mistério

A partir da versão 2008 do SQL Server, desenvolvedores do SQL Server acharam por bem incluir uma função de agregação nova, o COUNT_BIG. Se você já se deparou com ela dentro de alguma Query T-SQL, pode ter se perguntado qual o impacto de se usar COUNT_BIG ao invés de COUNT.

Bem, a resposta mais lógica é a seguinte: a única diferença entre a função COUNT e a função COUNT_BIG é o tipo de retorno. Enquanto uma função COUNT retorna um INT, uma função COUNT_BIG retorna sempre um BigInt.

Mas no que isto pode afetar minhas Querys. É simples, por questão de precaução, os engenheiros do SQL Server incluíram esta função para prevenir que contagens de grandes valores gerassem erros por não suportar o tamanho do retorno, já que dentro da tabela de variáveis do SQL Server, um INT consegue comportar -2^31 (-2.147.483.648) a 2^31-1 (2.147.483.647) – 4 bytes, enquanto um BigInt -2^63 (-9.223.372.036.854.775.808) a 2^63-1 (9.223.372.036.854.775.807) – 8 bytes é bem superior. Talvez no seu dia a dia isso não faça muita diferença, mas para as Data-base que crescem vertiginosamente todos os dias é algo relevante.

Note ainda que, quando usamos Views Indexadas, uma das inúmeras restrições de criação é que devemos utilizar COUNT_BIG ao invés de COUNT, tudo isso como precaução do time de desenvolvimento.

E afinal de contas, por que simplesmente não alteraram a função COUNT? Esta é simples, uma mudança como estas iria ser totalmente intrusiva nas atualizações de versões do SQL Server e neste ponto tudo é muito bem pensado para ser o menos traumático possível.

Logo as seguintes Querys:

SELECT COUNT(1)
SELECT COUNT_BIG(1)

São a mesma coisa, só que não.

Nenhum comentário:

Tags

Microsoft (82) Google (33) Windows (23) Internet (20) Windows 7 (15) Internet Explorer (13) Segurança (12) Games (11) Gmail (5) Jogos (5) Mobile (5) Mozila Firefox (5) Visual Studio 2010 (5) Banco de Dados (4) Kinect (4) Orkut (4) Video Game (4) Videos (4) 3D (3) Chrome Os (3) Twitter (3) Web Designer (3) YouTube (3) Acessibilidade (2) Adobe (2) Analise (2) Artigos (2) Asp.Net (2) HTML5 (2) Internet Explorer 9 (2) Live Messenger (2) SqlServer (2) Steve Jobs (2) Sun (2) Telefonia (2) Wifi (2) Yahoo (2) blizzard (2) .Net (1) 3G (1) 4G (1) App Store (1) CEO (1) Cinema (1) Firefox (1) IBM (1) Java (1) Mozilla (1) Música (1) Nuvem (1) PS3 (1) PSN (1) Steve Ballmer (1) Televisor (1) Visual Studio 11 (1) Web 2.0 (1) eBook (1) w3c (1)