数据库系统概论实验六 查询优化

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验六查询优化

考虑以下3种SQL操作,查看和分析SQL-SERVER查询分析器给出的查询计划,分析优化效果。

查询优化可以考虑以下方法:

1)建立索引

2)重写SQL语句(即查询重写)

3)其他优化方法(调整参数,建立视图或临时表等)

1、为本实验建立数据库,包括Student、Course、SC表和STU、COU、S_C表,它们的结构

与书上的“学生课程数据库”类似。

2、表Student中录入30条记录,Course中录入20条记录,SC中100条记录;表STU共

10000条记录,COU共100条记录,S_C共1000000条记录。其中,Student、Course、SC表已建好,STU、COU、S_C表中的数据可以通过存储过程INSERT_STU、INSERT_COU、INSERT_S_C,在建立的库中导入数据。

3、设计的数据情况如下:表Student中>20岁的学生记录为0条,占总元组数的0%;表STU

中>20岁的学生记录为150条,占总元组数的1.5%。分析查询计划,对查询进行优化。

4、单表查询

(1)查询Student表中20岁以上学生的信息

(2)查询Student表中20岁以下学生的信息

(3)查询STU表中20岁以上学生的信息

(4)查询STU表中20岁以下学生的信息

5、多表查询

(1)查询选修了2号课程的学生姓名

(2)查询没有选修1号课程的学生姓名

通过嵌套查询和连接查询的比较分析,对查询优化策略进行了解。

CREATE TABLE Course

(CNO CHAR(7) PRIMARY KEY,

CNAME VARCHAR(50),

CREDIT INT

)

GO

CREATE TABLE Student

(SNO CHAR(8) PRIMARY KEY,

SNAME CHAR(8),

SSEX CHAR(2),

SAGE INT,

SDEPT VARCHAR(50)

)

GO

CREATE TABLE SC

(CNO CHAR(7),

SNO CHAR(8),

GRADE float,

PRIMARY KEY (CNO,SNO),

FOREIGN KEY(CNO) REFERENCES Course(CNO) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY(SNO) REFERENCES Student(SNO) ON DELETE CASCADE ON UPDATE CASCADE )

GO

CREATE TABLE COU

(CNO CHAR(7) PRIMARY KEY,

CNAME VARCHAR(50),

CREDIT INT

)

GO

CREATE TABLE STU

(SNO CHAR(9) PRIMARY KEY,

SNAME CHAR(8),

SSEX CHAR(2),

SAGE INT,

SDEPT VARCHAR(50)

)

GO

CREATE TABLE S_C

(CNO CHAR(7),

SNO CHAR(9),

GRADE float,

PRIMARY KEY (CNO,SNO),

FOREIGN KEY(CNO) REFERENCES COU(CNO) ON DELETE CASCADE ON UPDATE CASCADE,

FOREIGN KEY(SNO) REFERENCES STU(SNO) ON DELETE CASCADE ON UPDATE CASCADE

)

GO

SELECT *

FROM Student

WHERE SAGE>20;

CREATE INDEX STUAGE ON Student (SAGE);

DROP INDEX Student.stuage;

SELECT *

FROM Student

WHERE SAGE<21;

SELECT *

FROM STU

WHERE SAGE>20;

CREATE INDEX STUAGE ON STU (SAGE); DROP INDEX STU.stuage;

SELECT *

FROM STU

WHERE SAGE<21;

SELECT SNAME

FROM Student

WHERE SNO IN

(SELECT SNO

FROM SC

WHERE CNO=3401002);

SELECT SNAME,Student.SNO

FROM Student,SC

WHERE Student.SNO=SC.SNO

AND CNO=3401002;

SELECT SNAME

FROM Student

WHERE SNO IN

(SELECT SNO

FROM SC

WHERE CNO!=3401001);

SELECT SNAME,Student.SNO

FROM Student,SC

WHERE Student.SNO=SC.SNO

AND CNO!=3401001;

SELECT SNAME

FROM Student

相关文档
最新文档