SQL Server查询优化和事务处理
栏目: 数据库 · SQL Server · 发布时间: 5年前
内容简介:查询优化:顾名思义就是创建索引、视图等方式使数据库快速查找到需要的东西索引分为:唯一索引、主键索引、聚集索引、非聚集索引、复合索引、全文索引。
查询优化:顾名思义就是创建索引、视图等方式使数据库快速查找到需要的东西
索引分为:
唯一索引、主键索引、聚集索引、非聚集索引、复合索引、全文索引。
在SQL Server中,一个表只能创建一个聚集索引,但可以创建多个非聚集索引。
按照下列标准选择建立索引的列:
频繁搜索的列;
经常用于查询选择的列;
经常 排序 、分组的列;
经常用于连接的列(主键/外键)
不要使用下面列创建索引:
仅包含几个不同值的列;
表中包含几行。
在 SQL 语句中,特别是在SELECT语句中正确使用索引可以大大提高查询速度,保证应用程序的运行性能。
视图是一种虚拟表,通常是作为来自一个或多个表的行或列的子集创建的。
视图通常用来进行以下三种操作:
筛选表中的行;
防止未经许可的用户访问敏感的信息;
将多个物理数据表抽象为一个逻辑数据表。
使用视图可以给用户和开发人员带来很多好处:
对最终用户的好处:
结果更容易理解;
获得数据更容易。
对开发人员的好处:
限制数据检索更容易;
维护应用程序更方便。
创建视图语法
create view aa as SELECT dbo.基本信息表.学号, dbo.成绩表.学号 AS Expr1, dbo.基本信息表.姓名, dbo.成绩表.成绩 FROM dbo.基本信息表 INNER JOIN dbo.成绩表 ON dbo.基本信息表.学号 = dbo.成绩表.学号
查看视图
select * from aa
存储过程的优点:
模块化程序设计;执行速度快、效率高;减少网络流量;具有良好的安全性。
常用的系统存储过程
比如:
exec sp_databases #列出当前系统中的数据库 exec sp_helptext aa #查看视图的语句文本
若xp_cmdshell作为服务器安全配置的一部分而被关闭,请使用如下语句启用:
exec sp_configure 'show advanced options',1 #显示高级配置信息 go reconfigure #重新配置 go exec sp_configure 'xp_cmdshell',1 #打开xp_cmdshell选项 go reconfigure #重新配置 go
使用这些语句开启扩展存储过程。
比如使用这些语句在系统中创建某些文件:
exec xp_cmdshell 'md c:\bank',no_output #创建文件夹c:\bank exec xp_cmdshell 'dir c:\' #列出c盘下的文件等内容
create proc oo as select 姓名, SUM(成绩) as 总成绩 from 基本信息表 left join 成绩表 on 基本信息表.学号=成绩表.学号 group by 姓名 #创建存储过程qq exec qq #查看存储过程qq create proc ww @shuo varchar(10) as select 姓名, SUM(成绩) as 总成绩 from 基本信息表 left join 成绩表 on 基本信息表.学号=成绩表.学号 group by 姓名 having 姓名=@shuo #创建针对每个同学查看的记录 exec ww 张三 #查看ww存储过程但是只查看张三
触发器分为以下几种
INSERT触发器:当向表中插入数据时触发,自动执行触发器定义的SQL语句;
UPDATE触发器:当更新表中某列、多列时触发,自动执行触发器所定义的SQL语句;
DELETE触发器:当删除表中记录时触发,自动执行触发器定义的SQL语句。
两个特殊的表由系统管理:
创建触发器的语句:
第一种
create trigger 删除 on 科目表 for delete as begin delete from 成绩表 end #删除之后不会同步从表中的数据
第二种
create trigger 自动同步成绩 on 科目表 after delete as begin delete from 成绩表 where 科目id=(select 科目id from deleted) end #删除之后自动同步成绩
第三种
create trigger 禁止删除 on 基本信息表 for delete as print '禁止删除' rollback transaction #禁止删除数据,如果删除数据则执行回滚、撤回操作
事务:保证数据库的原子性、一致性、隔离性、持久性,简称ACID。
一个小实例
begin transaction declare @errorsum int set @errorsum=0 #定义 内部变量,用来保存前一条的执行结果,执行成功为0,执行不成功为非0. /*--转帐:张三的帐户少1000,李四的帐户多1000元--*/ update bank set currentmoney=currentmoney-1000 where name='zhangsan' set @errorsum=@errorsum+@@ERROR update bank set currentmoney=currentmoney+1000 where name='lisi' set @errorsum=@errorsum+@@error print '查看转账事务中的余额' select * from bank if @errorsum<>0 begin print '交易失败,回滚事务' rollback transaction end else begin print '交易成功,提交事务,写入硬盘,永久地保存' commit transaction end go print '查看转账事务后的余额' select * from bank go
锁的模式:
共享锁(S锁):用于读取资源;
排他锁(X锁):用于修改数据;
更新锁(U锁):U锁是S锁和X锁的结合。
查看锁:
1,使用sys.dm_tran_locks动态管理视图;
2,使用Profiler来捕捉锁信息。
以上所述就是小编给大家介绍的《SQL Server查询优化和事务处理》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- Spring事务专题(三)事务的基本概念,Mysql事务处理原理
- 分布式事务中使用RocketMQ的事务消息机制优化事务的处理逻辑
- 干货分享 | Spanner事务处理技术详解
- 关于数据库事务并发的理解和处理
- DB 分库分表(4):多数据源的事务处理
- SQL Server存储过程中编写事务处理的方法小结
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Head First PHP & MySQL(中文版)
Lynn Beighley、Michael Morrison / 苏金国、徐阳 / 中国电力 / 2010-6 / 98.00元
通过《深入浅出PHP&MySQL(影印版)》,你将学习:准备好把你的静态HTML网页提升到下一个层次并使用PHP和MySQL建立数据库驱动的网站了吗?《深入浅出PHP& MysQL》是一本快捷实用的指南,让你的动态网站快速运行。自己动手建立实际应用程序,从视频游戏高分留言板到在线交友网站。当你完成后,你将可以进行验证表单、使用会话ID和cookies工作、执行数据库查询和联接、处理文件I/0操作等......一起来看看 《Head First PHP & MySQL(中文版)》 这本书的介绍吧!