数据库访问性能优化.ppt
《数据库访问性能优化.ppt》由会员分享,可在线阅读,更多相关《数据库访问性能优化.ppt(65页珍藏版)》请在三一办公上搜索。
1、数据库管理系统,授课教师 吴涛,第10章 数据库访问性能优化,10.1 存储过程10.2 索引,2/83,10.1 存储过程,10.1.1 存储过程概念10.1.2 创建和执行存储过程10.1.3 从存储过程中返回数据10.1.4 查看和维护存储过程10.1.5 一些系统存储过程,3/83,10.1.1 存储过程概念,SQL语言是应用程序和数据库之间的主要编程接口。使用SQL语言编写访问数据库的代码时,可用两种方法存储和执行这些代码。在客户端存储代码,并创建向数据库服务器发送的SQL命令将SQL语句存储在数据库服务器端,然后由应用程序调用执行这些SQL语句。存储在数据库服务器端供客户端调用执行
2、的SQL语句就是存储过程。,4/83,存储过程功能,接受输入参数并以输出参数的形式将多个值返回给调用者。包含执行数据库操作的语句。将查询语句执行结果返回到客户端内存中。,5/83,存储过程优点,允许模块化程序设计只需创建一次并存储在数据库中,就可以在应用程序中反复调用该存储过程改善性能在创建存储过程时对代码进行分析和优化,并在第一次执行时进行语法检查和编译,将编译好的可执行代码存储在内存的一个专门缓冲区中,以后再执行此存储过程时,只需直接执行内存中的可执行代码即可。,6/83,存储过程优点(续),减少网络流量只需要一条执行存储过程的代码即可实现,因此,不再需要在网络中传送大量的代码。可作为安全
3、机制使用对于即使没有直接执行存储过程中的语句权限的用户,也可以授予他们执行该存储过程的权限。,7/83,10.1.2 创建和执行存储过程,创建存储过程CREATE PROCEDURE 存储过程名 参数名 数据类型=default OUTPUT,n AS SQL语句 n 执行存储过程 EXEC UTE 存储过程名 实参,OUTPUT,n,8/83,示例,例1不带参数的存储过程。查询计算机系学生的考试情况,列出学生的姓名、课程名和考试成绩。CREATE PROCEDURE p_StudentGrade1AS SELECT Sname,Cname,Grade FROM Student s INNER
4、 JOIN SC ON s.Sno=SC.Sno INNER JOIN Course cON c.Cno=sc.Cno WHERE Dept=计算机系执行此存储过程:EXEC p_StudentGrade1,9/83,示例,例2带输入参数的存储过程。查询某个指定系学生的考试情况,列出学生的姓名、所在系、课程名和考试成绩。CREATE PROCEDURE p_StudentGrade2 dept char(20)AS SELECT Sname,Dept,Cname,Grade FROM Student s INNER JOIN SC ON s.Sno=SC.Sno INNER JOIN Cour
5、se c ON c.Cno=SC.Cno WHERE Dept=dept执行存储过程,查询信息管理系学生的修课情况 EXEC p_StudentGrade2 信息管理系,10/83,示例,例3带多个输入参数并有默认值的存储过程:查询某个学生某门课程的考试成绩,课程的默认值为“java”。CREATE PROCEDURE p_StudentGrade3 sname char(10),cname char(20)=JavaAS SELECT Sname,Cname,Grade FROM Student s INNER JOIN SC ON s.Sno=SC.sno INNER JOIN Cours
6、e c ON c.Cno=SC.Cno WHERE sname=sname AND cname=cname,11/83,参数传递方式,按参数位置传值实参的排列顺序与创建存储过程时参数定义的顺序一致。EXEC p_StudentGrade3 吴宾,高等数学按参数名传值在EXEC语句中,指明定义存储过程时指定的参数的名字以及参数的值。EXEC p_StudentGrade3 sname=吴宾,cname=高等数学,12/83,如果在定义存储过程时为参数指定了默认值,则在执行存储过程时可以不为有默认值的参数提供值。例如,执行例3的存储过程:EXEC p_StudentGrade3 吴宾相当于执行:E
7、XEC p_StudentGrade3 吴宾,Java,13/83,示例,例4带输出参数的存储过程。统计全体学生人数,并将统计结果用输出参数返回。CREATE PROCEDURE p_Count total int OUTPUTAs SELECT total=COUNT(*)FROM Student 执行此存储过程:DECLARE res intEXEC p_Count res OUTPUTPRINT res,14/83,示例,例5带输入参数和输出参数的存储过程。统计指定课程(课程名)的平均成绩,并将统计结果用输出参数返回。CREATE PROC p_AvgGrade cn char(20),
8、avg_grade int OUTPUTAS SELECT avg_grade=AVG(Grade)FROM SC JOIN Course C ON C.Cno=SC.Cno WHERE Cname=cn,15/83,执行例5存储过程示例,查询Java课程的平均成绩。DECLARE Avg_Grade intEXEC p_AvgGrade java,Avg_Grade OUTPUTPRINT Avg_Grade,16/83,示例,例6统计指定系选修指定课程(课程名)的学生人数和考试平均成绩,并用输出参数返回选课人数和平均成绩。CREATE PROC p_CountAvg dept varcha
9、r(20),cn varchar(20),cnt int OUTPUT,avg_grade int OUTPUTAS SELECT cnt=COUNT(*),avg_grade=AVG(Grade)FROM SC JOIN Course C ON C.Cno=SC.Cno JOIN Student S ON S.Sno=SC.Sno WHERE Dept=dept AND Cname=cn,17/83,执行例6存储过程示例,查询计算机系修“高等数学”的学生人数和考试平均成绩。DECLARE Count int,AvgGrade intEXEC p_CountAvg 计算机系,高等数学,Coun
10、t OUTPUT,AvgGrade OUTPUTSELECT Count AS 人数,AvgGrade AS 平均成绩,18/83,修改数据示例,例7将指定课程(课程号)的学分增加指定的分数。CREATE PROC p_UpdateCredit cno varchar(10),inc intAS UPDATE Course SET Credit=Credit+inc WHERE Cno=cno,19/83,删除数据示例,例8删除指定课程(课程名)中考试成绩不及格学生的此门课程的修课记录。CREATE PROC p_DeleteSC cn varchar(20)AS DELETE FROM SC
11、 WHERE Grade 60 AND Cno IN(SELECT Cno FROM Course WHERE Cname=cn),20/83,插入数据示例,例7.在课程表中插入一行数据,其各列数据均通过输入参数获得。CREATE PROC p_InsertCourse cno char(6),cname nvarchar(20),x tinyint,y tinyintAS INSERT INTO Course VALUES(cno,cname,x,y),21/83,SQL Server提供4种存储过程返回数据的形式 输出参数,既可以返回数据(整型值或字符值等),也可以返回游标变量(游标是可以
12、逐行检索的结果集,具体内容请参见本书第9章)。返回代码,只能是整型值。SELECT 语句的结果集,这些语句包含在该存储过程内或该存储过程所调用的任何其它存储过程内。可从存储过程外引用的全局游标。,10.1.3 从存储过程中返回数据,22/83,例10建立查询指定系的学生姓名和性别的存储过程,如果用户未指定系名,则返回代码1;如果用户指定的系名不存在,则返回代码2。CREATE PROC p_Student dept varchar(20)=NULLAS IF dept IS NULL RETURN 1-未指定系名 IF NOT EXISTS(SELECT*FROM Student WHERE
13、Dept=dept)RETURN 2-指定的系名无效 SELECT Sname,Sex FROM Student WHERE Dept=dept调用该存储过程。DECLARE ret intEXEC ret=p_Student IF ret=1 PRINT 必须指定一个系名IF ret=2 PRINT 指定的系名不存在,示例,23/83,例11根据各种错误设置不同的返回代码值。查询指定课程(课程名)的考试平均成绩,根据每种可能的错误赋予的返回代码。CREATE PROCEDURE p_GetAvgGrade cname varchar(30)=NULL,avg_grade int OUTPUT
14、 AS IF cname IS NULL-验证cname参数的有效性 RETURN 1 IF(SELECT COUNT(*)FROM Course WHERE Cname=cname)=0 RETURN 2 SELECT avg_grade=AVG(Grade)FROM SC JOIN Course c ON SC.Cno=c.Cno WHERE Cname=cname IF avg_grade IS NULL-检查该门课程是否有考试 RETURN 3 ELSERETURN 0-成功!,示例,24/83,DECLARE ret int,avg int,tip varchar(40)EXEC r
15、et=p_GetAvgGrade avg_grade=avg outputSET tip=CASE ret WHEN 1 THEN 提示1:必须指定一个课程名!WHEN 2 THEN 提示2:指定的课程名不存在!WHEN 3 THEN 提示3:指定的课程还没有考试!ENDPRINT tip,调用例11,25/83,10.1.4 查看和维护存储过程,查看存储过程修改存储过程删除存储过程,26/83,1.查看存储过程,在SSMS的“对象资源管理器”中,展开要查看存储过程的数据库,然后依次展开该数据库下的“可编程性”“存储过程”,即可看到该数据库下用户定义的全部存储过程。,27/83,2.修改存储过
16、程,ALTER PROC EDURE 存储过程名 参数名 数据类型=default OUTPUT,.n AS SQL语句.n 与定义存储过程的语句基本一样。,28/83,示例,例12修改student_grade2存储过程,使其能查询指定系考试成绩大于等于80分的学生的修课情况。ALTER PROCEDURE student_grade2 dept char(20)AS SELECT Sname,Dept,Cname,Grade FROM Student s INNER JOIN SC ON s.Sno=SC.Sno INNER JOIN Course c ON c.Cno=SC.Cno WH
17、ERE Dept=dept AND Grade=80,29/83,3.删除存储过程,删除存储过程语法DROP PROC|PROCEDURE 存储过程名,n 例13删除p_StudentGrade1存储过程。DROP PROC p_StudentGrade1,30/83,1.sp_columns作用:返回当前环境中指定表或视图的列信息。语法格式:sp_columns table_name=object,table_owner=owner,table_qualifier=qualifier,column_name=column,10.1.5 一些系统存储过程,31/83,例查询Student表中包
18、含的列信息。EXEC sp_columns table_name=Student,示例,32/83,作用:返回当前环境中单个表的主键信息。语法格式:sp_pkeys table_name=name,table_owner=owner,table_qualifier=qualifier,2.sp_pkeys,33/83,例2.查询SC表包含的主键。EXEC sp_pkeys table_name=SC,示例,34/83,作用:返回当前环境的逻辑外键信息。sp_fkeys pktable_name=pktable_name,pktable_owner=pktable_owner,pktable_q
19、ualifier=pktable_qualifier,fktable_name=fktable_name,fktable_owner=fktable_owner,fktable_qualifier=fktable_qualifier,3.sp_fkeys,35/83,例3查看引用Student表的外键表和外键列。EXEC sp_fkeys pktable_name=Student,示例,36/83,作用:返回可在当前环境中查询的对象列表,也就是返回任何能够在 FROM 子句中出现的对象。sp_tables table_name=name,table_owner=owner,table_qual
20、ifier=qualifier,table_type=type,fUsePattern=fUsePattern,4.sp_tables,37/83,例4在Students数据库中执行下列语句,查看该数据库中的全部可查询对象。EXEC sp_tables,示例,38/83,例5在Students数据库中执行下列语句,查看该数据库中的全部用户表。EXEC sp_tables table_type=TABLE,示例,39/83,例6.在MySimpleDB数据库中执行下述代码,查看Person架构中的可查询对象。EXEC sp_tables table_name=%,table_owner=Prod
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 访问 性能 优化
链接地址:https://www.31ppt.com/p-6578690.html