Método para processar dados acima de dez milhões de níveis para aumentar a velocidade da consulta

1. Tente evitar o uso do operador! = Or <> na cláusula where, caso contrário, o mecanismo abandonará o uso de índices e executará uma varredura completa da tabela.
2. Para otimizar a consulta, a verificação completa da tabela deve ser evitada o máximo possível.Primeiro, considere o estabelecimento de índices nas colunas envolvidas em onde e ordenar por.
3. Tente evitar julgar o valor nulo do campo na cláusula where, caso contrário, o mecanismo deixará de usar o índice e executará uma varredura completa da tabela, como:
     select id from t onde num é null,
     pode definir o valor padrão de 0 em num para garantir que Não há valor nulo na coluna num da tabela e, em seguida, faça a consulta desta forma:
     selecione id de t onde num = 0
4. Tente evitar o uso ou na cláusula where para ingressar na condição, caso contrário, o mecanismo deixará de usar o índice e executará uma verificação completa da tabela, como :
     Selecione a identificação de t onde num = 10 ou num = 20
     pode ser consultado assim:
     selecione a identificação de t em que num = 10
     união todos
     selecione a identificação de t em que num = 20
5. A consulta a seguir também resultará em uma verificação completa da tabela: (não pode ser Definir sinal de porcentagem)
     selecione o ID de t em que nome como '% abc%'
    Para melhorar a eficiência, considere a pesquisa de texto completo.
6. In e not in também deve ser usado com cuidado, caso contrário, causará uma varredura completa da tabela, como:
     select id from t where num in (1,2,3)
     Para valores contínuos, você pode usar entre em vez de em:
     selecione id de t onde num entre 1 e 3
7. Se você usar parâmetros na cláusula where, também causará uma varredura completa da tabela. Como o SQL analisa apenas variáveis ​​locais em tempo de execução, o otimizador não pode adiar a escolha do plano de acesso para o tempo de execução; ele deve escolher em tempo de compilação. No entanto, se o plano de acesso for estabelecido em tempo de compilação, o valor da variável ainda será desconhecido, portanto, não poderá ser usado como entrada para a seleção do índice. A instrução a seguir executará uma varredura completa da tabela:
     selecione ID de t onde [email = num = @ num] num = @ num [/ email]
     pode ser usado para forçar a consulta a usar o índice:
     selecione id de t com (index (nome do índice)) where [email = num = @ num] num = @ num [/ email]
8. Você deve tentar evitar operações de expressão nos campos da cláusula where, o que fará com que o mecanismo abandone o uso de índices e faça uma varredura completa da tabela. Tais como:
     selecione id de t onde num / 2 = 100
     deve ser alterado para:
     selecione id de t onde num = 100 * 2
9. Deve tentar evitar operações de funções no campo da cláusula where, o que fará com que o mecanismo desista de usar o índice Execute uma verificação completa da tabela. Por exemplo:
     selecione id de t onde substring (nome, 1,3) = 'abc'-id cujo nome começa com abc
     selecione o ID de t em que data (dia, criado, '2005-11-30') = 0 - '2005-11-30 'O ID gerado
     deve ser alterado para:
     selecione o ID de t onde o nome como' abc% '
     selecione o ID de t where createdate> = '2005-11-30' e createdate '' 2005-12-1 '10
. Não execute funções, operações aritméticas ou outras operações de expressão no lado esquerdo de "=" na cláusula where, caso contrário, o sistema será possível O índice não pode ser usado corretamente.
11. Ao usar um campo de índice como uma condição, se o índice for um índice composto, o primeiro campo no índice deverá ser usado como uma condição para garantir que o sistema use o índice, caso contrário, o índice não será usado e deve Na medida do possível, torne a ordem dos campos consistente com a ordem do índice.
12. Não escreva algumas consultas sem sentido, como a necessidade de gerar uma estrutura de tabela vazia:
     selecione col1, col2 em #t de t onde 1 = 0
     esse código não retornará nenhum conjunto de resultados, mas consumirá recursos do sistema, deve ser alterado Dessa forma:
     crie a tabela #t (…)
13.



14. Nem todos os índices são eficazes para consultas. O SQL é otimizado com base nos dados da tabela. Quando a coluna de índice tem muita duplicação de dados, a consulta SQL pode não usar o índice. Por exemplo, uma tabela possui os campos sexo, masculino, As fêmeas têm quase a metade, portanto, mesmo que o índice seja construído sobre o sexo, isso não ajudará na eficiência da consulta.
15. O índice não é mais o melhor, certamente pode melhorar a eficiência da seleção correspondente, mas ao mesmo tempo também reduz a eficiência da inserção e atualização, porque a inserção ou atualização pode reconstruir o índice; portanto, como construir o índice requer uma consideração cuidadosa, Depende da situação específica. O número de índices de uma tabela não deve exceder 6; se houver muitos, deve-se considerar se os índices criados em algumas colunas que não são usadas com frequência são necessários.
16. Deve evitar a atualização da coluna de dados de índice em cluster, tanto quanto possível, porque a ordem da coluna de dados de índice em cluster é a ordem de armazenamento físico dos registros da tabela, uma vez que o valor das alterações da coluna levará ao ajuste da ordem de todos os registros da tabela, o que consumirá recursos consideráveis. Se o sistema de aplicativos precisar atualizar com freqüência a coluna de dados do índice em cluster, será necessário considerar se o índice deve ser construído como um índice em cluster.
17. Use campos numéricos o máximo possível.Se os campos que contêm apenas informações numéricas não forem projetados para serem do tipo caractere, isso reduzirá o desempenho da consulta e da conexão e aumentará a sobrecarga do armazenamento. Isso ocorre porque o mecanismo compara cada caractere na cadeia de caracteres um por um ao processar a consulta e a conexão e, para o tipo numérico, ele precisa ser comparado apenas uma vez.
18. Use varchar / nvarchar em vez de char / nchar o máximo possível, porque primeiro o espaço de armazenamento dos campos de tamanho variável é pequeno, o que pode economizar espaço de armazenamento e, em segundo lugar, para consultas, a eficiência da pesquisa em um campo relativamente pequeno é obviamente maior.
19. Não use selecione * de t em qualquer lugar, substitua "*" por uma lista de campos específica e não retorne nenhum campo que não seja usado.
20. Tente usar variáveis ​​de tabela em vez de tabelas temporárias. Se a variável da tabela contiver uma grande quantidade de dados, observe que o índice é muito limitado (apenas o índice da chave primária).
21. Evite a criação e exclusão freqüentes de tabelas temporárias para reduzir o consumo de recursos da tabela do sistema.
22. As tabelas temporárias não são inutilizáveis.O uso adequado delas pode tornar algumas rotinas mais eficazes, por exemplo, quando você precisa se referir repetidamente a um conjunto de dados em uma tabela grande ou comum. No entanto, para eventos únicos, é melhor usar uma tabela de exportação.
23. Ao criar uma tabela temporária, se você inserir uma grande quantidade de dados de uma só vez, poderá usar select into em vez de create table para evitar um grande número de logs para melhorar a velocidade; se a quantidade de dados não for grande, para facilitar os recursos da tabela do sistema, você deve primeiro crie tabela e insira.
24. Se uma tabela temporária for usada, todas as tabelas temporárias deverão ser explicitamente excluídas no final do procedimento armazenado, truncar a tabela primeiro e depois soltar a tabela, para evitar o bloqueio a longo prazo das tabelas do sistema.
25. Evite usar cursores o máximo possível, porque a eficiência dos cursores é baixa; se os dados da operação do cursor excederem 10.000 linhas, considere reescrever.
26. Antes de usar o método baseado em cursor ou o método de tabela temporária, você deve primeiro procurar uma solução baseada em conjunto para resolver o problema.O método baseado em conjunto geralmente é mais eficaz.
27. Como tabelas temporárias, os cursores não são inutilizáveis. O uso de cursores FAST_FORWARD para conjuntos de dados pequenos geralmente é superior a outros métodos de processamento linha a linha, especialmente quando você deve consultar várias tabelas para obter os dados necessários. Rotinas que incluem "total" no conjunto de resultados geralmente são executadas mais rapidamente do que usando cursores. Se o tempo de desenvolvimento permitir, o método baseado em cursor e o conjunto podem ser tentados para ver qual método é melhor.
28. Defina SET NOCOUNT ON no início de todos os procedimentos e gatilhos armazenados e defina SET NOCOUNT OFF no final. Não há necessidade de enviar uma mensagem DONE_IN_PROC para o cliente após executar cada instrução de procedimentos armazenados e gatilhos.
29. Tente evitar devolver grandes quantidades de dados ao cliente.Se a quantidade de dados for muito grande, considere se os requisitos correspondentes são razoáveis.
30. Tente evitar grandes operações de transação e melhore a simultaneidade do sistema. 
发布了23 篇原创文章 · 获赞 47 · 访问量 14万+

Acho que você gosta

Origin blog.csdn.net/wenjianzhiqin/article/details/81017468
Recomendado
Clasificación