Nosso banco de dados está recebendo as seguintes solicitações:
select * from [schema].[table] (nolock) where (Date_A > Date_B and Archive = 0)
Esta é uma solicitação normal que é feita pelo nosso aplicativo. Em média, o pedido está demorando entre 200ms - 400ms para ser concluído, com cerca de 100ms - 150ms na CPU. As leituras normalmente chegam a cerca de 48k. Este é pelo menos um exemplo de como esse script funciona.
Qual seria a melhor forma (se houver) de agilizar esse tipo de solicitação?
A tabela tem 240.932 linhas e as consultas retornam 0 registros.
Se houver apenas um pequeno subconjunto de linhas com
Archive = 0
, você poderá usar um índice filtrado:Observação: fiz o índice nos dois campos de data apenas porque não conheço nenhum outro campo em sua tabela - pode fazer mais sentido que isso esteja em um campo diferente
Nota adicional: sempre tome cuidado para incluir as colunas de filtragem nas chaves de índice filtradas ou nas colunas incluídas, então aqui para um exemplo do porquê: Estimativa de linha incorreta fornecida com um índice filtrado
Isso mantém o índice pequeno (o que significa que ele usa menos armazenamento e é mais rápido de ler), porque apenas as linhas em que Archive é 0 são incluídas nele.
Se um índice filtrado não funcionar para você (e há vários cenários em que eles não funcionam, consulte Índices filtrados e SQL dinâmico para um exemplo), você pode tentar um índice normal não clusterizado no campo de arquivo OU na data Campos. Você gostaria de criar o índice em qualquer campo que fosse mais seletivo - o que significa qual deles restringirá mais os resultados.
Por exemplo, novamente, se apenas um pequeno subconjunto de suas linhas tiver um valor de Arquivo de 0, você poderá criar este índice:
Isso permitirá que sua consulta busque as linhas corretas (onde Arquivo é 0) e, em seguida, filtre facilmente em Data_A e Data_B.
Comentários adicionais sobre sua consulta:
select *
- enumere cada um dos campos que você realmente precisa em seus resultados para ser mais eficiente e permitir uma indexação mais eficaznolock
se a precisão dos resultados for importante