Vincent faz alguns pontos importantes das advertências das IOTs, mas você também pode obter alguns benefícios significativos.
Pessoalmente, acho que eles são significativamente subutilizados no Oracle e devem ser considerados muito mais amplamente - não apenas a solução possível para problemas de desempenho. Como você precisa recriar a tabela para converter entre IOT e heap, é improvável que isso ocorra em um banco de dados sempre ativo e muito usado, a menos que os problemas de desempenho sejam graves.
Martin Widlake tem uma ótima série de posts sobre IOTs. Existem alguns benefícios significativos que você pode obter usando-os:
- Reduza significativamente as leituras físicas e lógicas de E / S
- Uso mais eficiente do cache do buffer, o que pode beneficiar o desempenho em todo o sistema
- Economizou espaço, pois você está apenas mantendo um índice, não uma tabela também (a menos que você tenha segmentos excedentes)
No entanto, para obter esses benefícios, você precisa de tabelas em que (quase) sempre inclui as colunas principais da chave primária nas consultas e é provável que você esteja buscando várias linhas ao mesmo tempo. Alguns exemplos comuns dessas tabelas são:
- Detalhes mestre-múltiplos, como é freqüentemente encontrado em pedidos - itens de pedidos, faturas - linhas de faturas etc.
- Tabelas de resolução muitos-para-muitos que normalmente são consultadas "unidirecional". Por exemplo, em uma
customer_addresses
tabela, é muito mais comum encontrar todos os endereços de um cliente, em vez de todos os clientes de um endereço.
Uma desvantagem é que a inserção de dados é mais lenta, portanto, é necessário ponderar os custos e benefícios. Por fim, tudo se resume a conhecer seus dados e entender como eles devem ser usados, o que deve orientar a decisão.