索引、视图、存储过程和触发器的应用

实验案例一:验证索引的作用

1、首先创建一个数据量大的表,名称为“学生表”,分别有三列,学号,姓名和班级,如下图所示,学号为自动编号,班级为默认值“一班”。

2、向表中插入大量数据,数据越多,验证索引的效果越好。

使用语句完成:While 1>0 Insert into 学生表(姓名) values(‘于美丽’)

上面语句是一个死循环,除非强制结束,如果1大于0就会一直向表中插入姓名

如下图所示:

等待5分钟左右,打开表的属性,查看表的行数,当前为1032363,如下图所示:

3、 使用语句查询第900000行的数据,Select * from 学生表 Where 学号=900000

4、打开“sql server profiler ”工具进行跟踪,如下图所示:

打开“sql server profiler ”工具查看跟踪的信息,发现查询时间很长,cpu工作了265毫秒,reads:读了8649次,writes:写了10次,duration:总计花费2336毫秒完成查询。

为了下面分析文件更准确,多执行几次Select* from 学生表 Where 学号=900000

然后把跟踪的结果保存在桌面上:

5、打开“数据库引擎优化顾问”,添加跟踪文件,进行分析,发现索引建议,需要建立索引。

注意选择benet数据库中的学生表,然后点击“开始分析”

索引类型为clusterd(聚集索引),索引列为“学号”。

6、按照“数据库引擎优化顾问”的索引建议建立聚集索引,并且选择“唯一”

7、再次执行Select * from 学生表Where 学号=900000

8、打开sql server profiler查看跟踪的时间,发现查询时间大幅提升,说明索引可以提高查询速度。

发现总计时间为1毫秒,几乎忽略不计

实验案例二:分别练习创建各种索引

1、创建聚集索引

目前tstudent表中没有任何索引也没有主键

为tstudent表创建聚集索引

选中studentID,单击左上侧的主键按钮

为Tstuden表的studentID创建主键就同时创建了聚集索引

2、创建组合索引

为成绩表创建组合索引,因为一个学生不能为一门学科录入两次成绩,所以将成绩表中的studentID和subjectID创建组合索引

解决办法:

菜单栏----工具----选项

找到设计器(designers),将标记处的勾去掉,单击“确定”

这样组合索引就创建成功了。

3、创建唯一索引

创建唯一性约束的时候就会创建唯一性索引,不能有重复值

为Tstudent表创建唯一非聚集索引

create unique nonclustered index U_cardID on TStudent(cardID)

4、创建非聚集索引---可以有重复值

为Tstudent表的姓名列创建非聚集索引

使用命令查看表上的索引

Select * from sys.sysindexes where id=(select object_id from sys.all_objects where name='Tstudent')

Indid中1代表聚集索引

Indid中2代表唯一非聚集索引

Indidz中3代表非聚集索引

使用sp_help Tstudent也可以查看到相关表的信息

原文发布于微信公众号 - L宝宝聊IT(gh_b0e552aa80db)

原文发表时间:2017-12-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hadoop数据仓库

HAWQ技术解析(八) —— 大表分区

一、HAWQ中的分区表         与大多数关系数据库一样,HAWQ也支持分区表。这里所说的分区表是指HAWQ的内部分区表,外部分区表在后面“外部数据”篇讨...

2147
来自专栏Java进阶架构师

「mysql优化专题」什么是慢查询?如何通过慢查询日志优化?(10)

日志就跟人们写的日记一样,记录着过往的事情。但是人的日记是主观的(记自己想记的内容),而数据库的日志是客观的,根据记录内容分为以下好几种日志:

783
来自专栏维C果糖

史上最简单的 MySQL 教程(四十一)「触发器」

触发器:trigger,是指事先为某张表绑定一段代码,当表中的某些内容发生改变(增、删、改)的时候,系统会自动触发代码并执行。

42114
来自专栏Android-薛之涛

Android-多线程

        通俗的说:我们平日里打开的QQ,微信,简书,都是一个进程。进程是程序的一次动态执行过程,它需要经历从代码加载,代码执行到执行完毕的一个完整的过程...

742
来自专栏沃趣科技

MySQL8.0之数据字典

MySQL 8.0 将数据库元信息都存放于InnoDB存储引擎表中,在之前版本的MySQL中,数据字典不仅仅存放于特定的存储引擎表中,还存放于元数据文件、非事务...

3969
来自专栏java思维导图

【一分钟知识】线程同步,线程调度

sleep()和yield()方法区别 1 sleep()方法给其他线程运行机会时不考虑线程的优先级,因此会给低优先级的线程以运行的机会; yield()方法只...

3138
来自专栏大内老A

谈谈分布式事务之三: System.Transactions事务详解[下篇]

在前面一篇给出的Transaction的定义中,信息的读者应该看到了一个叫做DepedentClone的方法。该方法对用于创建基于现有Transaction对象...

1908
来自专栏Golang语言社区

http线程池的设计与实现(c++)

http线程池的主要用途是异步处理使用无状态短连接的http请求,在传输层通信基于tcp协议和应用层基于http协议的基础上,达到c++服务器与web服务器通信...

2743
来自专栏开发与安全

linux网络编程之socket(八):五种I/O模型和select函数简介

一、五种I/O模型 1、阻塞I/O ? 我们在前面所说的I/O模型都是阻塞I/O,即调用recv系统调用,如果没有数据则阻塞等待,当数据到来则将数据从内核空间(...

2220
来自专栏杨建荣的学习笔记

数据紧急修复之启用错误日志 (r2第12天)

昨晚对测试环境进行了升级,同步了部分生产的数据。整个过程比较顺利,但是在最后一步启用foreign key constraint的时候报了错误。 ora-022...

2609

扫码关注云+社区