Usuário com melhor resposta
Índices Hipotéticos

Pergunta
-
Olá, saudações
Preciso saber se no SQL SERVER tem como criar um ÍNDICE HIPOTÉTICO (ou virtual).
A intenção é que ao invés de criar o índice fisicamente no disco, ele seria criado somente no catalogo do SGBD e teria estatísticas também. Desta forma ao solicitar um plano de execução da query o Otimizador do SQL SERVER, poderia utilizar/considerar que existe esse indice, pois para ele esse indice existe, mas na verdade não. Isso é util para ver se compensa criar ou não um índice.
attNeto- Editado Giraya segunda-feira, 11 de julho de 2016 15:45
Respostas
-
Giraya,
Achei em alguns documentos de um curso que fiz, teste o exemplo abaixo para criação de indices hipoteticos:
CREATE INDEX idx_table_Hipotetico ON Table(campo) WITH STATISTICS_ONLY = -1
Espero que ajude.
Att
Reginaldo C Silva
- Marcado como Resposta Junior Galvão - MVPMVP, Moderator sexta-feira, 15 de julho de 2016 12:12
Todas as Respostas
-
Giraya,
Sinceramente esse seu questionamento não é estranho, mas a princípio não consigo imaginar isso a não ser utilizando uma tabela temporária e você criar um índice a ela.
Na verdade essa sua consideração em dizer que é útil ou não criar um índice com base nesta análise não é verdadeira, para se determinar que um índice deve ou necessita ser criado temos que analisar alguns fatores como:
- Densidade dos dados;
- Seletividade dos dados; e
- Granularidade.
Sabendo que quanto mais densa for uma coluna maior será a necessidade de se implementar um índice.
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
Boa tarde,
Eu não conheço o comando para a criação de indices hipotéticos, mas sei que o DTA(Database Tuning Advisor) faz a criação de indices hipoteticos por traz dos panos para avaliar a necessidade e se aquele Índice seria viável, assim como você precisa.
Você poderia estar utilizando a ferramenta para avaliar essa necessidade, ele já te diz em quantos % tal indicie vai melhorar sua consulta, pode ser uma opção para voce.
Att
Reginaldo C. Silva
-
Pedro
Entendo que
- Densidade dos dados;
- Seletividade dos dados; e
- Granularidade.
são fatores importantes a se analisar, mas e se acontecer de voce criar um indice e o otimizador não utilizar? voce vai ter perdido tempo e espaço em disco, ok?
Essa é a vantagem do indice hipotético, voce cria ele, olha o plano de execução, para ver se o otimizar irá utiliza-lo e caso positivo, cria ele de verdade.
Sou novo em SQL SErver, mas sei que Oracle , SAP Sybase sql anywhere tem esse recurso.
Qualquer ajuda é bem vinda.
Grato
-
-
Giraya,
Achei em alguns documentos de um curso que fiz, teste o exemplo abaixo para criação de indices hipoteticos:
CREATE INDEX idx_table_Hipotetico ON Table(campo) WITH STATISTICS_ONLY = -1
Espero que ajude.
Att
Reginaldo C Silva
- Marcado como Resposta Junior Galvão - MVPMVP, Moderator sexta-feira, 15 de julho de 2016 12:12
-
-
Giraya,
Certo, eu compreendo a sua argumentação!!!
Só não concordo quando coloca que o Oracle ou outros produtos possuem este tipo de recurso o SQL Server tem que ter, não é bem assim.
E quando eu destaquei os itens acima, é justamente por conhecimento e experiência na área, pois não devemos ficar criando índices de qualquer forma.
Outro ponto se você criar um índice que não esta sendo utilizado o próprio SQL Server vai saber o que fazer, coisa que outros produtos talvez não saibam e além disso, temos também recurso para conseguir obter e controlar este cenário.
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
Giraya,
A dica do Reginaldo pode ser o caminho, é uma forma de ter uma estrutura fictícia que contenha internamente uma estrutura estatística, mas este tipo de implementação não pode ser considerada algo que venha a ajudar na performance.
Este post pode ser bastante útil para você: https://www.simple-talk.com/sql/database-administration/hypothetical-indexes-on-sql-server/
Para que você possa realmente testar a enalisar o uso deste tipo de implementação será necessário utilizar os comandos: DBCC AUTOPILOT e SET AUTOPILOT ON, ambos recursos não documentados pela Microsoft.
Tem este outro post: https://www.mssqltips.com/sqlservertip/3246/sql-server-performance-tuning-with-hypothetical-indexes/
Vou aproveitar a sua dúvida para montar dois post para o meu blog!!!
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Editado Junior Galvão - MVPMVP, Moderator sexta-feira, 15 de julho de 2016 12:26
-
Giraya,
Achei em alguns documentos de um curso que fiz, teste o exemplo abaixo para criação de indices hipoteticos:
CREATE INDEX idx_table_Hipotetico ON Table(campo) WITH STATISTICS_ONLY = -1
Espero que ajude.
Att
Reginaldo C Silva
Reginaldo,
Vale ressaltar que o uso da opção Statistics_Only = -1 não é um recurso reconhecido e documentado pela Microsoft.
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-