SQL Serever学习16——索引,触发器,数据库维护

摘要:
sqlserver2014数据库应用技术清华大学出版社索引是一个非常重要的概念。我们知道数据存储在计算机的页面中,就像单词存储在字典中一样。数据库索引可以帮助我们快速定位存储数据的位置,而无需扫描整个数据库索引。一旦创建,数据库将被自动管理和维护。当添加、删除或修改套接字数据库时,索引将被修改。索引分类:聚集索引、非聚集索引、包含列索引、索引视图、全文索引、xml索引、聚集索引,相当于排序字典(表中的数据将
  sqlserver2014数据库应用技术 《清华大学出版社》  索引

这是一个很重要的概念,我们知道数据在计算机中其实是分页存储的,就像是单词存在字典中一样

数据库索引可以帮助我们快速定位数据在哪个存储页区,而不用扫描整个数据库

索引一旦被创建就会数据库自动管理和维护,增删改插座数据库都会对索引做修改

索引分类:

  • 聚集索引
  • 非聚集索引
  • 包含性列索引
  • 索引视图
  • 全文索引
  • xml索引

聚集索引,就是相当于排序的字典(将表中的数据完全重新排序),一个表只有一个,所占空间相当于表中数据的120%,数据建立聚集索引,会改变数据行的存储物理结构

非聚集索引,不改变数据行的物理存储结构,CREATE INDEX默认建立非聚集索引,理论一个表可以有249个非聚集索引

索引和约束

设置主键,会自动创建PRIMARY KEY 和创建一个聚集索引

创建UNIQUE 约束会自动创建一个唯一非聚集索引

创建表的索引

SQL Serever学习16——索引,触发器,数据库维护第1张

SQL Serever学习16——索引,触发器,数据库维护第2张

SQL Serever学习16——索引,触发器,数据库维护第3张

SQL Serever学习16——索引,触发器,数据库维护第4张

使用SQL语句

CREATE INDEX IX_name_mj
ON 买家表(买家名称)
GO

SQL Serever学习16——索引,触发器,数据库维护第5张

 查看索引

EXEC sp_helpindex 买家表

SQL Serever学习16——索引,触发器,数据库维护第6张

分析索引

查看查询计划,使用的索引(优先使用聚集索引)

SET SHOWPLAN_ALL ON
GO
SELECT * FROM 买家表
GO

SET SHOWPLAN_ALL OFF
GO

SQL Serever学习16——索引,触发器,数据库维护第7张

显示统计信息,查看所花费的磁盘io活动量

SET STATISTICS IO ON
GO
SELECT * FROM 买家表
GO

SET STATISTICS IO OFF
GO

SQL Serever学习16——索引,触发器,数据库维护第8张

 维护索引

数据表的增删改操作会产生大量索引碎片,索引表不连续,降低索引性能,需要整理索引

查看索引碎片SQL

DBCC SHOWCONTIG(买家表,PK_买家表)
GO

SQL Serever学习16——索引,触发器,数据库维护第9张

 ssms查看索引

SQL Serever学习16——索引,触发器,数据库维护第10张

SQL Serever学习16——索引,触发器,数据库维护第11张

索引碎片整理

DBCC INDEXDEFRAG(销售管理,买家表,PK_买家表)

SQL Serever学习16——索引,触发器,数据库维护第12张

 触发器

触发器是一个高级的数据约束,他是特殊的存储过程,不能通过执行sql触发,由增删改等事件自动触发

sqlserver2014提供3种触发器:

  • DML触发器,包括事后触发器,替代触发器,CLR运行时触发器
  • DDL触发器,修改表结构触发
  • LOGIN触发器,登录的时候触发

DML触发器

INSERT触发器

如果员工年龄不到18岁不执行插入操作

CREATE TRIGGER Employee_Insert
	ON Employee
	AFTER INSERT
AS
BEGIN
	--从INSERTED表获取新插入员工的出生年月
	DECLARE @birthday date
	SELECT @birthday=birthday FROM inserted
	--判断新员工年龄
	IF(YEAR(GETDATE())-YEAR(@birthday)<18)
	BEGIN
		PRINT '该员工年龄不到18岁,不能入职!'
		ROLLBACK TRANSACTION  --回滚这个节点之前的所有操作,然后继续执行后面的语句
	END
END

验证

INSERT Employee VALUES('小明','2012-10-10')

SQL Serever学习16——索引,触发器,数据库维护第13张

再验证

INSERT Employee VALUES('小明','1912-10-10')

SQL Serever学习16——索引,触发器,数据库维护第14张

注意主键id仍然会增长,即使刚刚的操作回滚了,id还是增加了1

 UPDATE触发器

防止用户修改员工姓名name字段

CREATE TRIGGER Employee_Update
	ON Employee
	AFTER UPDATE
AS
BEGIN
	IF(UPDATE(NAME))
	BEGIN
		PRINT '禁止修改员工姓名!'
		ROLLBACK TRANSACTION  --回滚这个节点之前的所有操作,然后继续执行后面的语句
	END
END

验证

UPDATE Employee SET NAME='XX'

SQL Serever学习16——索引,触发器,数据库维护第15张

数据库的维护

备份

使用存储过程创建备份设备

EXEC sp_addumpdevice 'DISK','COMB','E"DATACOMB.BAK'

SQL Serever学习16——索引,触发器,数据库维护第16张

删除备份设备

EXEC sp_dropdevice 'COMB'

SQL Serever学习16——索引,触发器,数据库维护第17张

使用SQL创建数据库备份

BACKUP DATABASE 销售管理
TO COMB

SQL Serever学习16——索引,触发器,数据库维护第18张

SQL Serever学习16——索引,触发器,数据库维护第19张

使用SQL还原数据库

RESTORE DATABASE COMB
FROM DISK='E:/DATA/COMB.BAK'

SQL Serever学习16——索引,触发器,数据库维护第20张

SQL Serever学习16——索引,触发器,数据库维护第21张

免责声明:文章转载自《SQL Serever学习16——索引,触发器,数据库维护》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇如何隐藏滚动条但又能滚动skywalking对nginx的支持下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Mysql触发器 :当一个表发生插入或更新时,将数据同步到另一张表中

tbl_slope:发生更新的表, checkupdates:更新后插入数据的表 CREATE triggerupdatetbl_slope AFTER update--表示触发器是在激活它的语句之后触发 ontbl_slope for each row --mysql固定语法 BEGIN if EXISTS(SELECT * FROM ch...

ORACLE 查看RMAN的备份信息总结

    关于Oracle数据库的RMAN备份,除了邮件外,是否能通过其它方式检查RMAN备份的成功与失败呢?其实我们可以通过下面SQL脚本来检查某个时间段备份失败的记录: SELECT * FROM V$RMAN_STATUS WHERE START_TIME >= TO_DATE(&START_TIME,'YYYY-MM-DD HH24...

SQL Server 2000详细安装过程及配置

说明:这篇文章是几年前我发布在网易博客当中的原创文章,但由于网易博客现在要停止运营了,所以我就把这篇文章搬了过来,虽然现如今SQL Server 2000软件早已经过时了,但仍然有一部分人在使用它,尤其是某些高校的学生在做毕业设计或者课程设计的时候可能会使用到,所以就把该软件的安装过程保留在这里吧。 另外,此SQL Server 2000软件只能在Wind...

【记一次有关定时任务的问题】

背景最近写的内容是,用java爬下来几个学校网站的招聘信息数据。涉及到的内容有定时任务、httpClient进行html抓取,Jsoup进行代码的分割。其他的就只是爬取数据时的Document分析。 最初的代码架构设计也不算什么架构设计,但也确实是第一次去思考代码的简洁、可复用、美观。也是想了很久。 起初要实现的是,在一个方法去进行定时任务。对代码通过功...

手工备份恢复oracle数据库

 手工备份恢复oracle数据库:    虽然已经有了rman工具   但是手工恢复oracle能够让你对oracle数据库有更加深入的了解 数据库一致性开机条件:   数据文件 scn,控制文件 scn,redo scn一致控制文件记录:   数据文件应该到达的scn   当前redo   数据的物理结构信息   归档信息    前提条件:   归档日...

elasticsearch之python备份

一:elasticsearch原理 Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。 但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,...