第二篇 关系数据库语言.ppt

优化连接查询 (1)过滤操作次序问题 SQL SERVER数据库采用自下而上的顺序来解析WHERE子句, SQL SERVER建议表之间的连接应该写在其他WHERE条件之前。 SELECT a.SNo, SName, Score FROM Student a, SC b, Course c WHERE a.SNo=b.Sno AND b.CNo=c.CNo AND CName= 数学 AND Score60 SELECT a.SNo, SName, Score FROM Student a, SC b, Course c WHERE CName= 数学 AND Score60 AND a.SNo=b.Sno AND b.CNo=c.CNo ???哪种书写方式更好呢? 优化连接查询 (2)书写规则问题 实例 SGA Shared pool Library cache Data Dictionary cache PMON SMON DBWR LGWR CKPT Others 内存 结构 后台 进程 用户 进程 服务器 进程 PGA 用户 进程 服务器 进程 PGA Redo log Buffer cache Database Buffer cache 重做日志文件 数据文件 sql1 sql2 sqln … 数据库原理与设计 SQL语句的命中率越高,共享缓冲区的利用率越高,数据库的性能就越好。 优化策略:制定SQL语句编码标准。 编写完全相同的SQL语句: 语句文本相同 大小写相同 赋值变量相同 ※ SELECT * FROM student WHERE Sno=‘03001’; SELECT * FROM student WHERE Sno=‘03001’; ? 优化连接查询 (2)书写规则问题 数据库原理与设计 2.4.4 集合查询(合并查询) (1)什么是集合(合并)查询 (2)集合(合并)查询使用规则 (3)集合(合并)查询的优劣势分析 数据库原理与设计 (1)什么是集合查询(合并查询) 例:查选修了00001 或00005课程的学生 为了合并多个SELECT语句的查询结果,可以使用集合运算符(set operator)进行合并查询。 其基本语法: SELECT 语句1…… [UNION|UNION ALL| INTERSECT|MINUS] SELECT 语句2…… Select sno from sc where cno=‘00001’ Select sno from sc where cno=‘00005’ UNION SQL Server只支持UNION 和UNION ALL操作,不支持INTERSECT和MINUS 数据库原理与设计 (2)合并查询使用规则: (1)Select 语句必须选择同样数量的列。 (2)相应的列必须具有相同的类型与长度。 Select sno,score from sc where cno=‘00001’ Select sno,score from sc where cno=‘00005’ UNION (3)在合并查询的结果集合中,自动以第一个查询的字段名作为列名,因此,排序只能按照第一个查询的列名或者为序进行排序。 分析一下查询实现哪个更好呢? 例,查询选修了00001号课程或者00005号课程的学生学号 SELECT sno FROM sc WHERE cno=00001 union SELECT sno FROM sc WHERE cno=00005 等价与 SELECT sno FROM sc WHERE cno=00001 or cno=00005 order by sno 分析一下查询实现哪个更好呢? 例,查询雇员表EMP中,工资大于2500 并且岗位为MANAGER SELECT ename,sal,job FROM emp WHERE sal2500 intersect

文档评论(0)

1亿VIP精品文档

相关文档