实验报告9 查询优化(推荐).pdf
文本预览下载声明
《数据库系统概论》实验报告
题目:实验九 查询优化 姓名 Vivian 日期 2006-1-1
实验内容及完成情况(写明你的优化方案):
一.实验运行环境:
CPU :P3 800
内存:512MB
硬盘:30G
操作系统:WINDOWS 2000 ADVANCED SERVER
数据库系统:KingbaseES V4.1
二.设计数据库及其数据状况:
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%。
(一) 单表查询
【例1】查询 Student 表中 20 岁以上学生的信息(表中元组数少,查询结果元组数所占比例
小)
[例 1-1]直接查询
SELECT * FROM Student WHERE sage20;
查看预查询计划:EXPLAIN SELECT * FROM STUDENT WHERE sage20;
执行语句并查看查询计划:EXPLAIN ANALYZE SELECT * FROM STUDENT WHERE
sage20;
查询计划:
QUERY PLAN
Seq Scan on STUDENT (cost=0.00..1.38 rows=1 width=51) /*表示系统的预查询计划*/
(actual time=0.000..0.000 rows=0 loops=1) /*表示系统实际执行的查询计划*/
Filter: (SAGE 20) /*Student 表的过滤条件 sage20*/
Total runtime: 0.000 ms /*表示系统的实际执行时间*/
[例 1-2]建立索引后再查询
CREATE INDEX stuage ON Student(sage);
SELECT * FROM Student WHERE sage20;
查询计划:
QUERY PLAN
Seq Scan on STUDENT (cost=0.00..1.38 rows=1 width=51) (actual time=0.000..0.000 rows=0
loops=1)
Filter: (SAGE 20)
Total runtime: 0.000 ms
【例2 】查询 Student 表中 20 岁以下学生的信息(表元组数少,查询结果元组数所占比例大)
[例 2-1]直接查询
SELECT * FROM Student WHERE sage20;
查询计划:
QUERY PLAN
Seq Scan on STUDENT (cost=0.00..1.38 rows=23 width=51) (actual time=0.000..0.000 rows=22
loops=1)
Filter: (SAGE 20)
Total runtime: 0.000 ms
[例 2-2]建索引后再查询
CREATE INDEX stuage ON Student(sage);
SELECT * FROM Student WHERE sage20;
查询计划:
QUERY PLAN
Seq Scan on STUDENT (cost=0
显示全部