开始:


发现在一个项目中,后台数据库各个表,具有外键约束的列上都没有创建索引。我们需要一次性给他们创建索引,下面我写了一个通用的存储过程sp_CreateIndexForFK,来实现这一个功能。

也许有人问,为什么要在外键上创建索引,它有什么好处,可以参考:

FOREIGN KEY 约束:http://msdn.microsoft.com/zh-cn/library/ms175464%28v=sql.105%29.aspx

The Benefits of Indexing Foreign Keys:http://www.sqlperformance.com/2012/11/t-sql-queries/benefits-indexing-foreign-keys

sp_CreateIndexForFK 存储过程脚本


use master
go
if object_id('sp_CreateIndexForFK') Is not nullDrop Proc sp_CreateIndexForFK
Go
/********************************************************************************************
%% Author        : Andy
%% Create Date    : 2012-12-26
%% Description    : 在具有外键约束的列创建索引V1.0
********************************************************************************************/
create proc sp_CreateIndexForFK
As
begindeclare @sql                    nvarchar(4000),@parent_object            sysname,@referenced_object        sysname,@constraint_object_id    int,@index_name            sysnamedeclare cur_x cursor for select a.object_id,object_name(a.parent_object_id)    as parent_object,object_name(a.referenced_object_id) as referenced_object from sys.foreign_keys awhere  exists(select 1 from sys.foreign_key_columns xleft join sys.index_columns y on y.object_id=x.parent_object_idand y.column_id=x.parent_column_idwhere y.index_id is nulland x.constraint_object_id=a.object_id)order by parent_object                            open cur_xfetch next from cur_x into @constraint_object_id,@parent_object,@referenced_objectwhile @@fetch_status = 0beginset @index_name='ix_'+@parent_object+'_'+@referenced_objectset @sql='create nonclustered index ['+@index_name+'] on '+quotename(@parent_object)+'('+(select stuff((select ','+quotename(b.name)from sys.foreign_key_columns ainner join sys.columns b on b.object_id=a.parent_object_idand b.column_id=a.parent_column_idwhere a.constraint_object_id=@constraint_object_idfor xml path('')),1,1,''))+');'exec sp_executesql @sql    print N'在表('+@parent_object+N'),已创建索引:'+@index_name fetch next from cur_x into @constraint_object_id,@parent_object,@referenced_objectendclose cur_xdeallocate cur_x end
go
exec sp_ms_marksystemobject 'sp_CreateIndexForFK' --标识为系统对象
go

调用方法:


e.g.

注: sp_CreateIndexForFK存储过程,不适用于SQL Server 2000环境,已在 SQL Server 2005/2008R2/2012 测试通过.

在外键上创建索引V1.0相关推荐

  1. 单图说TDSQL;OceanBase 2.2 事务引擎核心功能;穿云箭2.0版发布;RMAN DUPLICATE配置19C DG;外键上有无索引的影响;MySQL8.0 索引新功能;GaussDB C

    摘要:墨天轮数据库周刊第16期发布啦,每周1次推送本周数据库相关热门资讯.精选文章.干货文档. 热门资讯 1.英国电信企业Virgin Media营销数据库配置错误 导致90万客户信息泄露 [摘要]英 ...

  2. oracle外键如何创建索引,子表建立外键的索引问题

    本帖最后由 Yong Huang 于 2013-9-30 09:31 编辑 An index on the child table foreign key column is to prevent l ...

  3. Oracle外键需要建索引吗?

    关于Oracle中的外键,首先要说明一下. 1. 除非已定义了父表主键或唯一键约束,否则oracle将不允许创建子表的外键约束. 2. 在定义外键约束时,oracle不会自动创建索引,所以必须手动在与 ...

  4. mysql外键约束创建及删除_MySQL中的外键的创建,约束和删除

    一.外键的创建 语法一:后续添加方法 alter table 表名 add constraint 约束名 foreign key(当前表中约束的字段) references 主表表名(要约束的字段名) ...

  5. sql分区表上创建索引_SQL Server中分区表和索引的选项

    sql分区表上创建索引 介绍 (Introduction) I work for a large, multinational financial institution. Like most com ...

  6. django models索引_sql – 为什么Django显式地在唯一字段上创建索引

    更新:进一步简化实验psql的Q: 对于以下Django模型: class Book(models.Model): name = models.TextField(unique=True) pg_du ...

  7. sqlserver有外键无法创建触发器_数据库不使用外键的 9 个理由

    点击上方蓝色字体,选择"置顶公众号" 优质文章,第一时间送达 作者 | bang,Piotr Kononow 链接 | www.jdon.com/49188 Piotr Konon ...

  8. SQL主键与外键的创建与解析

    一个表中,会存很多条记录,需要一个列来位置标识一条数据 1.主键:唯一标识一条数据: 值不能为空 不能重复 标识列:一旦将一个列设置成标识列,它就不能再手动输入值,是插入数据时自动生成的.这个列的类型 ...

  9. SQL2K数据库开发二十二之索引操作在视图上创建索引

    1.在企业管理器中,右击要创建索引的视图,在弹出的菜单中选择"设计视图"命令进入视图设计器.         2.在视图设计器中显示了视图所包含的列,定义视图的SQL语句以及视图中 ...

最新文章

  1. 汇编语言 LOOP和[BX]的联合应用
  2. rabbitMQ教程 一篇文章看懂rabbitMQ
  3. 【LeetCode笔记】253. 会议室 II(Java、偏数学)
  4. am3352 linux 内核 编译,am335x uboot, kernel 编译
  5. poj 1456 Supermarket 贪心+并查集(个人感觉有点难判断出来
  6. Initramfs 原理和实践
  7. php实现无限极分类算法,php实现无限极分类
  8. 中国渔船数量不断下降,海洋渔船下降速度较慢「图」
  9. 软件测试工程师成长之路:掌握软件测试九大技术主题
  10. One Step By One Step 解析OkHttp3 - Dispatcher (一)
  11. 凌晨3点不回家:因为想不到的心酸!
  12. 少儿机器人编程学习指南
  13. ICRA 2021| SLAM方向论文汇总
  14. 在macOS下启用CGO_ENABLED的交叉编译Go语言项目生成Windows EXE文件
  15. Matlab如何提取论文插图中的渐变色?一招轻松搞定
  16. python图形用户界面编程
  17. matlab求心率变异性的程序,心率变异性及其相关算法实现_.ppt
  18. argparse参数详解--python
  19. UE进阶实例42(制作技能CD和能量球材质)
  20. 华为硬件工程师手册_华为认证云服务架构师正式发布

热门文章

  1. 区块链支付平台技术的应用
  2. 深入理解Python中的yield和send
  3. QT学习小结之信号与槽
  4. 解决vmware“二进制转换和长模式与此平台兼容.....”问题
  5. GCD使用经验与技巧浅谈
  6. php排序函数实例学习教程
  7. 本文主要介绍如何将音乐文件打包到程序中并设置为铃声
  8. 前缀树(字典树,单词查找树,Trie树)
  9. Anaconda3 | Ubuntu(python3.6)环境下安装opencv
  10. pytorch: 网络层参数初始化