在外键上创建索引V1.0
开始:
发现在一个项目中,后台数据库各个表,具有外键约束的列上都没有创建索引。我们需要一次性给他们创建索引,下面我写了一个通用的存储过程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相关推荐
- 单图说TDSQL;OceanBase 2.2 事务引擎核心功能;穿云箭2.0版发布;RMAN DUPLICATE配置19C DG;外键上有无索引的影响;MySQL8.0 索引新功能;GaussDB C
摘要:墨天轮数据库周刊第16期发布啦,每周1次推送本周数据库相关热门资讯.精选文章.干货文档. 热门资讯 1.英国电信企业Virgin Media营销数据库配置错误 导致90万客户信息泄露 [摘要]英 ...
- oracle外键如何创建索引,子表建立外键的索引问题
本帖最后由 Yong Huang 于 2013-9-30 09:31 编辑 An index on the child table foreign key column is to prevent l ...
- Oracle外键需要建索引吗?
关于Oracle中的外键,首先要说明一下. 1. 除非已定义了父表主键或唯一键约束,否则oracle将不允许创建子表的外键约束. 2. 在定义外键约束时,oracle不会自动创建索引,所以必须手动在与 ...
- mysql外键约束创建及删除_MySQL中的外键的创建,约束和删除
一.外键的创建 语法一:后续添加方法 alter table 表名 add constraint 约束名 foreign key(当前表中约束的字段) references 主表表名(要约束的字段名) ...
- sql分区表上创建索引_SQL Server中分区表和索引的选项
sql分区表上创建索引 介绍 (Introduction) I work for a large, multinational financial institution. Like most com ...
- django models索引_sql – 为什么Django显式地在唯一字段上创建索引
更新:进一步简化实验psql的Q: 对于以下Django模型: class Book(models.Model): name = models.TextField(unique=True) pg_du ...
- sqlserver有外键无法创建触发器_数据库不使用外键的 9 个理由
点击上方蓝色字体,选择"置顶公众号" 优质文章,第一时间送达 作者 | bang,Piotr Kononow 链接 | www.jdon.com/49188 Piotr Konon ...
- SQL主键与外键的创建与解析
一个表中,会存很多条记录,需要一个列来位置标识一条数据 1.主键:唯一标识一条数据: 值不能为空 不能重复 标识列:一旦将一个列设置成标识列,它就不能再手动输入值,是插入数据时自动生成的.这个列的类型 ...
- SQL2K数据库开发二十二之索引操作在视图上创建索引
1.在企业管理器中,右击要创建索引的视图,在弹出的菜单中选择"设计视图"命令进入视图设计器. 2.在视图设计器中显示了视图所包含的列,定义视图的SQL语句以及视图中 ...
最新文章
- 汇编语言 LOOP和[BX]的联合应用
- rabbitMQ教程 一篇文章看懂rabbitMQ
- 【LeetCode笔记】253. 会议室 II(Java、偏数学)
- am3352 linux 内核 编译,am335x uboot, kernel 编译
- poj 1456 Supermarket 贪心+并查集(个人感觉有点难判断出来
- Initramfs 原理和实践
- php实现无限极分类算法,php实现无限极分类
- 中国渔船数量不断下降,海洋渔船下降速度较慢「图」
- 软件测试工程师成长之路:掌握软件测试九大技术主题
- One Step By One Step 解析OkHttp3 - Dispatcher (一)
- 凌晨3点不回家:因为想不到的心酸!
- 少儿机器人编程学习指南
- ICRA 2021| SLAM方向论文汇总
- 在macOS下启用CGO_ENABLED的交叉编译Go语言项目生成Windows EXE文件
- Matlab如何提取论文插图中的渐变色?一招轻松搞定
- python图形用户界面编程
- matlab求心率变异性的程序,心率变异性及其相关算法实现_.ppt
- argparse参数详解--python
- UE进阶实例42(制作技能CD和能量球材质)
- 华为硬件工程师手册_华为认证云服务架构师正式发布