Melhor resposta
Pegar mesas é um trabalho em um restaurante. Significa limpar a mesa entre os clientes. Isso inclui remover todos os itens sujos ou usados (pratos, talheres, guardanapos) e, em seguida, limpar a mesa.
O título de trabalho tradicional para isso é “ajudante de garçom”, mas nem todo mundo que faz esse trabalho é menino . Pode haver um termo mais neutro quanto ao gênero agora.
Resposta
No cenário que você descreve, você afirma que os campos mais comumente usados na tabela são a chave primária (CompanyId ), um único campo de dados (CompanyName) e uma chave estrangeira (IndustryId). Se houver índices nesses campos, o que é garantido para a chave primária, e extremamente provável para a chave estrangeira, pois caso contrário o desempenho do seu banco de dados seria ruim, então as consultas que fazem referência apenas a esses campos serão, em muitos casos, satisfeitas inteiramente dos índices . As páginas do banco de dados em si não serão lidas. Você pode verificar isso solicitando um plano de execução de consulta do analisador de consulta. Se o plano de execução usa uma “busca de índice” ou “spool de índice”, então ele está usando um índice para construir os resultados da consulta. Se o índice de chave primária estiver agrupado, a situação é um pouco diferente, mas deixarei para você para pesquisar o que é um índice clusterizado no SQL Server e como ele altera a maneira como o banco de dados é armazenado e acessado. Em geral, se o SQL Server pode construir um conjunto de resultados usando dados de um índice, ele fará isso em vez de usar as páginas da tabela do banco de dados, porque isso significa ler menos dados. Um índice é estruturado de forma idêntica a uma tabela, exceto por ter apenas as colunas especificadas no índice, mais um campo localizador de linha que é um ponteiro para onde a linha está armazenada; esse ponteiro (24 bytes) é normalmente menor do que os próprios dados da linha e, portanto, quase invariavelmente cabem mais linhas da tabela de índice do que linhas da tabela em uma página do banco de dados.
O tamanho da página do banco de dados no SQL Server é fixado em 8192 bytes. 96 bytes da página são usados para um cabeçalho; esta mais outra sobrecarga deixa um tamanho máximo de linha de 8060 bytes. No entanto, o SQL Server 2008 permitirá que as colunas varchar, nvarchar, varbinary e sql\_variant excedam esse limite e moverá esses campos para páginas de estouro quando sua inclusão em uma linha faria com que uma linha excedesse esse limite de tamanho de linha. Além disso, as colunas text, ntext, image, nvarchar (max), varchar (max), varbinary (max) e xml são sempre armazenadas em páginas separadas, independentemente da quantidade de dados realmente armazenados na coluna. A definição de tabela que você postou mostra larguras de coluna totais que excedem em muito o limite de 8060 bytes, mas a maior parte disso está em campos varchar (n), então você vai acabar com páginas de estouro de linha para linhas onde o tamanho real da variável colunas de largura são suficientemente grandes. O número de páginas que uma linha usará nesta tabela irá, portanto, variar, dependendo de quanto tempo os dados realmente armazenados nas colunas de largura variável são para cada linha.
Em termos de melhoria de desempenho, se você tiver apenas alguns campos que são comumente usados, provavelmente poderá obter o máximo de aprimoramento simplesmente garantindo que os campos e combinações de campos que você normalmente usa estejam disponíveis como índices. Isso significa que a maioria dos conjuntos de linhas pode ser preenchida a partir de dados de índice em vez de dados de tabela, o que evitará problemas com o carregamento de grandes linhas do banco de dados. O melhor de tudo é que isso pode ser feito inteiramente no nível de DBA; o aplicativo não precisa ser reescrito para refletir a mudança no esquema causada pela adição (ou remoção) de índices. E, obviamente, qualquer coluna que você usará como parte de uma junção deve ser indexada; caso contrário, você estará fazendo varreduras de tabela para aquelas junções que são realmente muito lentas.
Eu posso sugerir que você considere ntext em vez de campos nvarchar grandes para alguns desses campos maiores, embora isso possa exigir alterações no código do aplicativo devido à semântica do texto / ntext são diferentes daqueles de varchar / nvarchar. As colunas de texto / ntexto são sempre armazenadas em páginas LOB, em vez de armazenadas condicionalmente na página de dados de linha, e se essas colunas estão frequentemente presentes e de tamanho moderado (digamos , 1000-2000 bytes), armazenando-os como text / ntext manterá o restante das páginas de dados de linha menores e pode permitir mais linhas por página, o que irá acelerar as varreduras de tabela que realmente não precisam fazer referência a essas colunas.