Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 12044|Resposta: 0

[Comunicação] Problema de utilização de índice quando o SQL Servers lida com '%palavra-chave%'

[Copiar link]
Publicado em 26/11/2014 15:52:19 | | | |

Declaração 1: O prefixo de curinga percentual de sinal % fará com que as consultas SQL parem o índice e, em vez disso, usem a varredura completa de tabelas. Essa afirmação é popular

A conclusão está errada

Na verdade, essa afirmação não é muito precisa. O prefixo coringa % torna a busca SQL por índices extremamente eficiente, mas na maioria dos casos ainda vai para o índice (não é necessário um índice em texto completo, basta construir um índice normal)

CRIE ÍNDICE NÃO AGRUPADO [Ix_index NOME] NO [dbo]. [wkf_ Nome da Mesa]
(
[db_title]  ASC
)

Execute agora

SELECT top 10 [db_id],[db_Summary],[db_AddDate],[db_title] DE [nome da biblioteca]. [dbo]. [wkf_database] onde [db_title] como '%dba%' ordenam por 1 desc

O plano de consulta é claramente exibido

Antes que a comparação seja indexada:


Como exceção, consultas complexas O otimizador de consultas pode abandonar o índice em favor da varredura completa da tabela. Isso não ocorre apenas com o LIKE '%palavra-chave%', mas também relacionado à complexidade da consulta




Declaração 2: Prefixos de porcentagem % de wildcard farão com que as consultas SQL indexem em vez de nenhum índice

Essa afirmação é muito unilateral, e 99% do índice reduzirá as E/S e melhorará a eficiência em comparação com não indexar, mas a ação de correspondência de chaves após a localização do índice também consome em parte o desempenho. Como mostrado nas duas figuras acima, se as palavras-chave forem facilmente correspondidas, a varredura completa da tabela rapidamente encontra os dados, e a varredura de índice não economiza tempo suficiente para compensar o tempo gasto pela ação de correspondência de chaves (a maioria das consultas online não apresenta esse problema).
Tratamento:
1. Se você não se importa, o consumo extra de desempenho não é muito grande. E diferentes palavras-chave têm consumo diferente, mas algumas têm esse problema e podem ser ignoradas
2. Uma maneira melhor é construir um índice de sobreposição (também conhecido como índice INCLUDE) se as condições permitirem. Premissa: a. O espaço de armazenamento é suficiente, b não afeta significativamente as operações DML, e c não possui campos grandes no índice sobrescrito

CRIE ÍNDICE NÃO AGRUPADO [Ix_index NOME] NO [dbo]. [wkf_ Nome da Mesa]
(
[db_title]  ASC
)
INCLUIR ( [db_id], db_Summary],[db_AddDate])

Neste momento, o plano de consulta de execução é o seguinte, o que é muito mais refrescante


O que foi dito acima é o que consigo pensar agora para processamento SQLSERVER SELECIONE * DO NOME DA TABELA COMO '%Keyword %'






Anterior:A replicação de transações SQL Server adiciona novas tabelas sem reinicialização
Próximo:Instrução SQL prática: estimativa de data
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com