[关闭]
@SovietPower 2022-05-21T13:46:44.000000Z 字数 3727 阅读 873

数据库系统 实验6

DB



实验要求


实验过程记录

  1. 在Dokcer环境中启动之前实验所创建的openGauss容器;

  2. 通过PowerShell连接到数据库db2022;

  3. sql执行以下语句,获取并解释该查询的执行计划;

    1. explain select name from instructor where dept_name = 'Biology';
    2. explain analyze select name from instructor where dept_name = 'Biology';
    3. explain performance select name from instructor where dept_name = 'Biology';
  4. 执行以下语句,获取并解释该查询的执行计划;

    1. explain select * from takes where id= '79446';
    2. explain analyze select * from takes where id= '79446';
    3. explain performance select * from takes where id= '79446';
  5. 执行以下语句,获取并解释该查询的执行计划;

    1. explain select distinct course.course_id, title from course, takes where course.course_id = takes.course_id and id = '13403';
    2. explain analyze select distinct course.course_id, title from course, takes where course.course_id = takes.course_id and id = '13403';
    3. explain performance select distinct course.course_id, title from course, takes where course.course_id = takes.course_id and id = '13403';
  6. 执行以下语句,获取并解释该查询的执行计划;

    1. explain select id, sum(credits) from ( select distinct id, course.course_id, credits from course, takes where course.course_id = takes.course_id and grade <> 'F' ) group by id;
    2. explain analyze select id, sum(credits) from ( select distinct id, course.course_id, credits from course, takes where course.course_id = takes.course_id and grade <> 'F' ) group by id;
    3. explain performance select id, sum(credits) from ( select distinct id, course.course_id, credits from course, takes where course.course_id = takes.course_id and grade <> 'F' ) group by id;

课程项目查询分析

==每一个人负责3个查询语句,完成如下内容==

画出查询计划树,并说明每个节点的功能和执行时间等信息
说明该执行计划是否是最优的
针对可能存在的性能问题,提出解决方案

可参考方法有:

查看粉丝列表 (我)

  1. SELECT follower_id, username FROM follow join user
  2. WHERE follow.follower_id=user.user_id and follow.followee_id=[user_id]
  3. ORDER BY follow_time DESC;

查看历史点赞(我)

  1. select * from scenery_card
  2. where card_id in
  3. (select card_id from like
  4. where user_id = [user_id])

推送关注用户的卡片(我)

  1. select card_id, user_id, title, score, likes
  2. from scenery_card
  3. where user_id in
  4. (select followee_id from follow
  5. where follower_id = [user_id])
  6. order by create_time desc
  7. limit ([page_number]-1)*[page_size], [page_size];

查看关注列表(瑾瑜)

  1. SELECT followee_id, username FROM follow join user
  2. WHERE follow.followee_id=user.user_id and follow.follower_id=[user_id]
  3. ORDER BY follow_time DESC;

景点类型搜索(瑾瑜)

  1. select * from scenery where tag_id in (select tag_id from tag_table where tag like concat('%', [tag], '%'))
  2. limit ([page_number]-1)*[page_size], [page_size];

匹配景点(瑾瑜)

  1. select * from scenery
  2. where province=[province] and city=[city] and district=[district]
  3. and (scenery_name like concat('%', [keyword], '%') or [keyword] like concat('%', scenery_name, '%'))
  4. limit ([page_number]-1)*[page_size], [page_size];

查看我的收藏(晓博)

  1. select * from scenery_card
  2. where card_id in
  3. (select card_id from bookmark
  4. where user_id = [user_id])

景点搜索(晓博)

  1. select * from scenery
  2. where province=[province] and ([city] is null or city=[city] and district=[district]
  3. and (scenery_name like concat('%', [keyword], '%') or [keyword] like concat('%', scenery_name, '%'))
  4. limit ([page_number]-1)*[page_size], [page_size];

推送地址附近的卡片(晓博)

  1. with user_address(province, city, district) as
  2. select (card_id, user_id, title, score, likes)
  3. from scenery_card
  4. where scenery_id in
  5. (select scenery_id
  6. from scenery natural join (select province, city, district from user
  7. where user_id = [user_id]) as user_address)
  8. order by create_time desc
  9. limit ([page_number]-1)*[page_size], [page_size];

存在的问题及解决方案


实验小结

通过使用openGauss或MySQL数据库管理系统中EXPLAIN的相关语法,分析了数据库管理系统中查询处理的基本流程,了解了不同查询算子的功能;在对模型寻找并生成合适的数据之后,针对具体查询场景画出查询树,分析查询开销,针对可能存在的性能问题提出解决了方案。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注