数据库系统之查询优化实例
1. 1000个学生,10000个选课记录。2号课程选课记录50个。一块内存可以放10个学生或者100个选课记录。计算机的内存有限,只能同时放下5块学生、1块选课记录和若干连接结果。计算机每秒可读写20块。现在需查找选了2号课的学生姓名,问若先做学生和选课记录的笛卡儿积运算,至少需要()秒?
- A、
50秒
- B、
105秒
- C、
100105秒
- D、
不足10秒
正确答案: C
解析:Student x SC
读取总块数=读Student表块数+读SC表遍数*每遍块数
=1000/10+(1000/(10*5))*(10000/100)
=100+20*100
=2100块
读取数据时间=2100/20=105秒
接下来还需要将连接好的笛卡儿积放到外存,因为是Student和SC表的乘积,结果要比Student的元组还长,我们就假设一块可以存放10条记录,那么一共有1000*10000=10的7次方条记录,10的6次方块,存放记录到外存要花费1000000/20=50000秒
还要再查找选了2号课的学生,所以需要再把这些笛卡儿积读到内存进行选择,所以又花费了50000秒,一共50000*2+105=100105秒
2. 1000个学生,10000个选课记录。2号课程选课记录50个。一块内存可以放10个学生或者100个选课记录。计算机的内存有限,只能同时放下5块学生、1块选课记录和若干连接结果。计算机每秒可读写20块。现在需查找选了2号课的学生姓名,问若先做学生和选课记录的自然连接运算(用嵌套循环法),至少需要()秒?
- A、
50
- B、
100
- C、
105
- D 、
205
正确答案: D
解析:同上需要读取2100块,读取数据花费105秒,但是不同的是连接结果是10000条数据,存放到外存花费10000/10/20=50秒,为了挑选2号课选课记录又读到内存,花费50秒,一共50*2+105=205秒
3. 1000个学生,10000个选课记录。2号课程选课记录50个。一块内存可以放10个学生或者100个选课记录。计算机的内存有限,只能同时放下5块学生、1块选课记录和若干连接结果。计算机每秒可读写20块。现在需查找选了2号课的学生姓名,问若先找出2号课程的选课记录,然后再自然连接,至少需要()秒?
- A、
10
- B、
105
- C、
205
- D、
100000
正确答案: A
先把10000条选课记录读到内存,花费10000/100/20=5秒,再把1000个学生读到内存,需要1000/10/20=5秒,再进行连接,一共需要5+5=10秒
4. 1000个学生,10000个选课记录。2号课程选课记录50个。一块内存可以放10个学生或者100个选课记录。计算机的内存有限,只能同时放下5块学生、1块选课记录和若干连接结果。计算机每秒可读写20块。问若先做学生和选课记录的笛卡儿积运算,至少需要读取()遍学生表?
- A、
1
- B、
20
- C、
100
- D、
以上都不对
正确答案: A
5. 1000个学生,10000个选课记录。2号课程选课记录50个。一块内存可以放10个学生或者100个选课记录。计算机的内存有限,只能同时放下5块学生、1块选课记录和若干连接结果。计算机每秒可读写20块。问若先做学生和选课记录的笛卡儿积运算,至少需要读取()遍选课记录表?
- A、
1
- B、
20
- C、
100
- D、
以上说法都不对
正确答案: B
6. 1000个学生,10000个选课记录。2号课程选课记录50个。一块内存可以放10个学生或者100个选课记录。计算机的内存有限,只能同时放下5块学生、1块选课记录和若干连接结果。计算机每秒可读写20块。(1)先做学生和选课记录的笛卡儿积运算;(2)用嵌套循环法,先做学生和选课记录的自然连接。问:(1)、(2)之间,读取学生表和选课记录表的次数是否一样?
- A、
是
- B、
否
正确答案: A