Eu tenho tabela Inventory_Break
particionada em IR_ID
(int). Também criei um índice não clusterizado para IR_ID
on the table.
Quando eu executo o seguinte:
SELECT *
FROM dbo.INVENTORY_BREAK
WHERE IR_ID IN ( 100, 101, 102 )
Eu recebo o seguinte plano de execução:
Indica Table Scan (HEAP). Não tenho certeza do que significa no contexto de uma tabela particionada. Eu também não vejo que ele usa qualquer tipo de índice. E, no entanto, deve, porque a consulta volta bastante rápido (por exemplo, a tabela tem 6 milhões de linhas).
Então, minhas perguntas são:
- O que significa Table Scan (HEAP) para uma tabela particionada?
- Ele realmente usa um índice, talvez nos bastidores?
- Existe alguma coisa que eu preciso fazer para melhorar a eficiência?
A consulta fez a eliminação da partição.
Se você observar a dica de ferramenta, a Contagem de partição real diz 3, o que significa que tocou em 3 partições. (A seção Seek Predicate também confirma isso.)
A razão pela qual aparece como uma varredura de tabela é porque é uma varredura de tabela com eliminação de partição. Não tenho certeza de como explicar isso.
Nenhum índice foi usado para isso. O particionamento da tabela é implementado mais profundamente nas estruturas internas do banco de dados do que em um índice, portanto, a eliminação da partição é muito eficiente por natureza (dado um predicado adequado, que você forneceu).
Dito isso, o predicado que você forneceu é adequado apenas para eliminação de partição e (muito provavelmente) não muito mais porque não é muito seletivo. Se todas as linhas dessas partições forem necessárias, isso já está próximo de uma solução ideal - geralmente é recomendável criar um índice clusterizado útil.