数据库系统之查询优化实例

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 

数据库系统之查询优化实例

上一篇:docker docker-compose编排服务运行测试mysql


下一篇:学习 SQL Server (7) :存储过程