none
Índices Hipotéticos RRS feed

  • 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.

    att
    Neto

    • Editado Giraya segunda-feira, 11 de julho de 2016 15:45
    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

    quinta-feira, 14 de julho de 2016 11:36

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]

    quarta-feira, 13 de julho de 2016 18:43
    Moderador
  • 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

    quarta-feira, 13 de julho de 2016 19:10
  • 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

    quarta-feira, 13 de julho de 2016 21:30
  • Reginaldo, precisava saber o comando para isso, pois vou utilizar isso de uma aplicação em java, nao pode ser pela ferramenta DTA.
    quarta-feira, 13 de julho de 2016 21:32
  • 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

    quinta-feira, 14 de julho de 2016 11:36
  • Reginaldo, isso que precisava.

    Obrigado!

    att

    quinta-feira, 14 de julho de 2016 15:02
  • 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]

    sexta-feira, 15 de julho de 2016 12:11
    Moderador
  • 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]




    sexta-feira, 15 de julho de 2016 12:14
    Moderador
  • 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]

    sexta-feira, 15 de julho de 2016 12:20
    Moderador
  • Bom dia Galvão,

    Isso a e, estou complementar de acordo com você.

    Obrigado por complementar a resposta,

    Att

    Reginaldo C Silva


    sexta-feira, 15 de julho de 2016 13:45