CloudDB

19 de nov de 20191 min

SQL Server - Gera script índices chaves estrangeiras

Atualizado: 20 de nov de 2019

Você, desenvolvedor, cria índices nas chaves estrangeiras ? Essa é uma boa prática porque evita o produto cartesiano,
 
table scan e tende a diminuir o uso de recursos do seu hardware. Nunca entendi monitorar hardware e por que não atuar na causa raiz?
 
Imagine que os índices acima irão ajudar nos joins e atualizações na tabela pai. Por quê? porque o Banco de Dados irá encontrar mais rápido
 
os dados para garantir a integridade.
 

 
Dá muito trabalho revisar agora? Não se você utilizar o script que já gerar para você todos os índices nas chaves estrangeiras.

--Create non clustered indexes for all foreign key references in the database DECLARE @sql nvarchar(max) SELECT @sql = IsNull(@sql + ';' + char(13) , '') + 'CREATE NONCLUSTERED INDEX [IX_' + tablename + '_' + columnname +'] ON ' + schema_names + '.[' + tablename + '] ( [' + columnname + '] ASC)' FROM --Display the sql that will be executed ( SELECT o.name AS tablename, cols.name AS columnName, sch.name as 'schema_names' FROM sys.foreign_key_columns fc inner join sys.objects o on fc.parent_object_id = o.object_id inner join sys.columns cols on cols.object_id = o.object_id and fc.parent_column_id = cols.column_id inner join sys.schemas sch on o.schema_id = sch.schema_id
 
EXCEPT SELECT o.name, cols.name ,sch.name as 'schema_names' FROM sys.index_columns icols inner join sys.objects o on icols.object_Id = o.object_id inner join sys.columns cols on cols.object_id = o.object_id inner join sys.schemas sch on o.schema_id = sch.schema_id and icols.column_id = cols.column_id) T
 

 
Print @sql
 

 
--select * from sys.objects
 
--select * from sys.schemas

    680
    0