SQL - Ajuste de banco de dados
Leva tempo para se tornar um especialista em banco de dados ou um administrador de banco de dados especialista. Tudo isso vem com muita experiência em vários designs de banco de dados e bons treinamentos.
Mas a lista a seguir pode ser útil para que os iniciantes tenham um bom desempenho de banco de dados -
Use o design de banco de dados 3BNF explicado neste tutorial no capítulo Conceitos de RDBMS.
Evite conversões de número para caractere porque os números e os caracteres se comparam de maneira diferente e levam ao rebaixamento do desempenho.
Ao usar a instrução SELECT, busque apenas as informações necessárias e evite usar * em suas consultas SELECT porque isso carregaria o sistema desnecessariamente.
Crie seus índices cuidadosamente em todas as tabelas onde você tem operações de pesquisa frequentes. Evite indexar nas tabelas onde você tem menos número de operações de pesquisa e mais número de operações de inserção e atualização.
Uma varredura de tabela completa ocorre quando as colunas na cláusula WHERE não têm um índice associado a elas. Você pode evitar uma varredura de tabela completa criando um índice nas colunas que são usadas como condições na cláusula WHERE de uma instrução SQL.
Tenha muito cuidado com os operadores de igualdade com números reais e valores de data / hora. Ambos podem ter pequenas diferenças que não são óbvias à vista, mas que tornam uma correspondência exata impossível, evitando que suas consultas retornem linhas.
Use a correspondência de padrões criteriosamente. LIKE COL% é uma condição WHERE válida, reduzindo o conjunto retornado apenas para os registros com dados começando com a string COL. No entanto, COL% Y não reduz ainda mais o conjunto de resultados retornados, pois% Y não pode ser avaliado com eficácia. O esforço para fazer a avaliação é muito grande para ser considerado. Nesse caso, o COL% é usado, mas o% Y é jogado fora. Pelo mesmo motivo, um caractere curinga% COL evita efetivamente que o filtro inteiro seja usado.
Ajuste suas consultas SQL examinando a estrutura das consultas (e subconsultas), a sintaxe SQL, para descobrir se você projetou suas tabelas para suportar a manipulação rápida de dados e escreveu a consulta de maneira ideal, permitindo que seu SGBD manipule os dados com eficiência .
Para consultas que são executadas regularmente, tente usar procedimentos. Um procedimento é um grupo potencialmente grande de instruções SQL. Os procedimentos são compilados pelo mecanismo de banco de dados e, em seguida, executados. Ao contrário de uma instrução SQL, o mecanismo de banco de dados não precisa otimizar o procedimento antes de ser executado.
Evite usar o operador lógico OR em uma consulta, se possível. OU inevitavelmente retarda quase qualquer consulta em uma tabela de tamanho substancial.
Você pode otimizar os carregamentos de dados em massa eliminando os índices. Imagine a tabela de histórico com muitos milhares de linhas. Essa tabela de histórico provavelmente também terá um ou mais índices. Quando você pensa em um índice, normalmente pensa em um acesso mais rápido à tabela, mas no caso de carregamentos em lote, você pode se beneficiar eliminando o (s) índice (s).
Ao realizar transações em lote, execute COMMIT após um bom número de criação de registros em vez de criá-los após cada criação de registro.
Planeje a desfragmentação do banco de dados regularmente, mesmo que isso signifique desenvolver uma rotina semanal.
Ferramentas de ajuste integradas
A Oracle tem muitas ferramentas para gerenciar o desempenho da instrução SQL, mas entre elas duas são muito populares. Essas duas ferramentas são -
Explain plan - a ferramenta identifica o caminho de acesso que será percorrido quando a instrução SQL for executada.
tkprof - mede o desempenho por tempo decorrido durante cada fase do processamento da instrução SQL.
Se você deseja simplesmente medir o tempo decorrido de uma consulta no Oracle, pode usar o comando SQL * Plus SET TIMING ON.
Verifique sua documentação RDBMS para obter mais detalhes sobre as ferramentas mencionadas acima e desfragmentar o banco de dados.