Como usar o índice na instrução select?

digamos na tabela de empregados, que criei um índice(idx_name) na coluna emp_name da tabela.

Preciso de especificar explicitamente o nome do índice na cláusula select ou será usado automaticamente para acelerar as consultas.

Se for necessário especificar na cláusula select, Qual é a sintaxe para usar o índice na consulta select ?

Author: Vivek, 2011-07-06

8 answers

Se quiser testar o índice para ver se funciona, aqui está a sintaxe:

SELECT *
FROM Table WITH(INDEX(Index_Name))

A declaração com forçará o índice a ser usado.

 62
Author: Jason, 2012-11-02 15:20:47
Boa pergunta.

Normalmente, o motor DB deve seleccionar automaticamente o índice a usar com base nos planos de execução da consulta que constrói. No entanto, existem alguns casos muito raros quando você quer forçar o DB a usar um índice específico.

Para poder responder à sua pergunta específica, tem de especificar o DB que está a usar.

Para o MySQL, quer ler a sintaxe da dica do Índice sobre como fazer isto

 29
Author: Tudor Constantin, 2011-07-06 08:52:29

Como usar o índice na instrução select?
por aqui.:

   SELECT * FROM table1 USE INDEX (col1_index,col2_index)
    WHERE col1=1 AND col2=2 AND col3=3;


SELECT * FROM table1 IGNORE INDEX (col3_index)
WHERE col1=1 AND col2=2 AND col3=3;


SELECT * FROM t1 USE INDEX (i1) IGNORE INDEX (i2) USE INDEX (i2);

E muitas mais formas de verificar isto

Preciso especificar explicitamente?

    Não, Não é preciso especificar explicitamente.
  • O motor DB deve seleccionar automaticamente o índice a usar com base nos planos de execução da consulta que constrói a partir da resposta @Tudor Constantin.
  • o Optimizador julgará se a utilização de seu índice fará sua consulta correr mais rápido, e se for, ele vai usar o índice. da resposta de @niktrl
 21
Author: VedX, 2015-03-18 08:11:51

Em Geral, o índice será usado se o custo assumido de usar o índice, e então, possivelmente, ter que realizar mais pesquisas de favoritos é menor do que o custo de apenas digitalizar a tabela inteira.

Se a sua pergunta for do formulário:

SELECT Name from Table where Name = 'Boris'
E uma linha de 1000 tem o nome Boris, certamente será usada. Se o nome de todos é Boris, ele provavelmente vai recorrer a uma varredura de mesa, uma vez que o índice é improvável de ser uma estratégia mais eficiente para acessar o dado.

Se for uma mesa larga (montes de colunas) e você fizer:

SELECT * from Table where Name = 'Boris'

Então ele ainda pode optar por realizar a varredura da tabela, se for uma suposição razoável de que ele vai levar mais tempo recuperando as outras colunas da tabela do que ele irá apenas procurar o nome, ou novamente, se é provável que ele esteja recuperando um monte de linhas de qualquer maneira.

 12
Author: Damien_The_Unbeliever, 2011-07-06 08:53:25

O optimiser irá julgar se o uso do seu índice fará a sua consulta correr mais depressa, e se for, irá usar o índice.

Dependendo das suas RDBMS, pode forçar o uso de um índice, embora não seja recomendado a menos que saiba o que está a fazer.

De um modo geral, deve indexar as colunas que utiliza no table join's e onde as declarações

 9
Author: niktrs, 2011-07-06 08:52:37

Geralmente, quando você cria um índice em uma tabela, a base de dados irá usar automaticamente esse índice enquanto procura por dados nessa tabela. Não precisas de fazer nada em relação a isso.

No Entanto, no MSSQL, você pode especificar um index hint, que pode especificar que um determinado índice deve ser usado para executar esta consulta. Mais informações sobre isso podem ser encontradas aqui.

Index hint is also seems to be available for MySQL . Graças a Tudor Constantine.

 5
Author: MD Sayem Ahmed, 2011-07-06 08:53:41

Usando a coluna a que o índice é aplicado nas suas condições, será incluído automaticamente. Você não tem que usá-lo, mas ele vai acelerar as consultas quando ele é usado.

SELECT * FROM TABLE WHERE attribute = 'value'

Usará o índice apropriado.

 3
Author: ChrisBint, 2011-07-06 08:51:07

A dica do Índice só está disponível para servidores de bases de dados Microsoft Dynamics. Para o servidor SQL tradicional, os filtros que você define em sua cláusula "onde" deve persuadir o motor a usar quaisquer índices relevantes... Desde que o plano de execução do motor possa identificar eficientemente como ler a informação (se uma varredura de tabela completa ou uma varredura indexada) - ele deve comparar os dois antes de executar a declaração propriamente dita, como parte de seu otimizador de desempenho embutido.

No entanto, pode forçar o Optimizador a analisar usando algo como

    Select  *
    From    [yourtable] With (Index(0))
    Where   ...

Ou procurar um índice em particular usando algo como

    Select  *
    From    [yourtable] With (Index(1))
    Where   ...
A escolha é tua. Veja as propriedades do índice da tabela no painel de objetos para obter uma idéia de qual índice você deseja usar. Deve corresponder ao(s) Seu (s) Filtro (s).

Para obter melhores resultados, enumere os filtros que devolveriam os resultados mais fracos primeiro. Eu não sei se estou certo em dizer, mas parece que os filtros de consulta são sequenciais; se você obter o seu sequence right, the optimiser should not have to do it for you by comparing all the combinations, or at least not begin the comparison with the more expensive queries.

 0
Author: Cory, 2018-08-31 14:11:25