看到,因爲SQL Server中的foreign key does not automatically create an index,我想在我的數據庫中創建的每一個領域FK一個明確的指標。我有過在架構100桌...在每個外鍵上添加索引的腳本?
因此,沒有任何人有一個現成的包裝腳本,我可以用它來檢測所有FKS,創造每一個指標?
看到,因爲SQL Server中的foreign key does not automatically create an index,我想在我的數據庫中創建的每一個領域FK一個明確的指標。我有過在架構100桌...在每個外鍵上添加索引的腳本?
因此,沒有任何人有一個現成的包裝腳本,我可以用它來檢測所有FKS,創造每一個指標?
OK,我工作了這一點,我自己 - 這是其他人的利益......
select 'create index IX_'+c.name+'_'+p.name+' on '+c.name+'('+cf.name+');'
from sysforeignkeys fk join sysobjects c on fk.fkeyid=c.id
join sysobjects p on fk.rkeyid=p.id
join syscolumns cf on c.id=cf.id and cf.colid = fk.fkey
left join sysindexkeys k on k.id = cf.id and k.colid = cf.colid
where k.id is null
order by c.name
它不工作100%,例如,如果你有一個表中的兩個FKS相同的主表,但也有一些這樣的實例足以(在我的DB至少),我可以可行地用手糾正這些。
我修改查詢中使用他們的系統視圖。它還將腳本中的每個FK腳本編寫成不止一個。
SELECT 'CREATE NONCLUSTERED INDEX ndx_' + o.name + '__' + c.name
+ ' ON ' + o.name + ' (' + c.name + ')'
FROM sys.foreign_keys fk
JOIN sys.objects o ON fk.parent_object_id = o.object_id
JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
JOIN sys.columns c ON fkc.parent_object_id = c.object_id
AND fkc.parent_column_id = c.column_id
ORDER BY o.name
這是很好的,我就在一個名爲列用戶以防有人添加各地名方braquets(只是發生在我身上)。 – vercelli 2016-08-29 11:27:46
好的,這是我的承擔。我添加了對方案的支持,並且檢查當前命名約定是否存在索引。通過這種方式,當您修改表格時,您可以檢查缺少的索引。
SELECT 'CREATE NONCLUSTERED INDEX IX_' + s.NAME + '_' + o.NAME + '__' + c.NAME + ' ON ' + s.NAME + '.' + o.NAME + ' (' + c.NAME + ')'
FROM sys.foreign_keys fk
INNER JOIN sys.objects o ON fk.parent_object_id = o.object_id
INNER JOIN sys.foreign_key_columns fkc ON fk.object_id = fkc.constraint_object_id
INNER JOIN sys.columns c ON fkc.parent_object_id = c.object_id
AND fkc.parent_column_id = c.column_id
INNER JOIN sys.tables t ON t.object_id = o.object_id
INNER JOIN sys.schemas s ON s.schema_id = t.schema_id
LEFT JOIN sys.indexes i ON i.NAME = ('IX_' + s.NAME + '_' + o.NAME + '__' + c.NAME)
WHERE i.NAME IS NULL
ORDER BY o.NAME
這太好了,謝謝你的發帖。 – udog 2013-11-25 03:35:03
嘿,我做了一個週末,我拋棄它。它被定製我的命名規則,所以我做了很多字符串操作,並用模式名(schema_id)和OBJECT_NAME(parent_object_id)從sys.foreign_keys選擇。 – 2010-02-22 09:35:44