mysql —案例复杂查询+索引使用+DBeaver中创建索引

这篇具有很好参考价值的文章主要介绍了mysql —案例复杂查询+索引使用+DBeaver中创建索引。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

接上章 我们 对一个简单的选课功能进行 设计分析

实际上在工作中 拿到一个需求,也是这样的一个分析过程

一个份 需求文档+原型 出来,只要是你负责这个模块,就需要你自己建表建库,设计接口文档,也许现在有的公司会有一个带你的大哥会帮你建表建库【甚至接口文档都帮你写好了,你只需要按照接口进行开发】,那也只是初步的【实习生】,到后面还是得靠自己

再有的公司是需要开发人员写概要设计(里面就包含数据库设计)的 , 但总的来说是八九不离十,分析步骤还是一样的

案例

我们一步一步来,先造一些数据

1. teacher_info

--  Auto-generated SQL script #202211150937
INSERT INTO elective.teacher_info (id,code,name,sex,professional,create_id,create_time,update_id,update_time)
  VALUES (2,'LS20221115001','李四',0,'副教授',1,'2022-11-15 10:11:25',1,'2022-11-15 10:11:25');

mysql —案例复杂查询+索引使用+DBeaver中创建索引,mysql,mysql,数据库

2. student_info

INSERT INTO elective.student_info (id,code,name,sex,class_name,create_id,create_time,update_id,update_time,age)
  VALUES (2,'XS20221115001','学生2',0,'物联网工程二班',1,'2022-11-15 10:11:25',1,'2022-11-15 10:11:25',23);

mysql —案例复杂查询+索引使用+DBeaver中创建索引,mysql,mysql,数据库

3.course_info

比如

老师张三 有两门课 一门微积分 一门 java基础

老师李四 有一门课 SpringCloud概论

INSERT INTO elective.course_info (id,teacher_id,course_name,course_code,course_type,course_score,create_id,create_time,update_id,update_time)
VALUES (1,1,‘微积分’,‘WJF2022’,‘数学’,4,1,‘2022-11-15 10:11:25’,1,‘2022-11-15 10:11:25’);

mysql —案例复杂查询+索引使用+DBeaver中创建索引,mysql,mysql,数据库

4 .student_course_info

选课表

学生1 选了张三 老师的 微积分 + 李四老师的 SpringCloud概论

学生2 选了张三 老师的 java基础

--  Auto-generated SQL script #202211150955
INSERT INTO elective.student_course_info (id,stu_id,cou_id,score,create_id,create_time,update_id,update_time)
  VALUES (2,1,3,95,1,'2022-11-15 10:11:25',1,'2022-11-15 10:11:25');

mysql —案例复杂查询+索引使用+DBeaver中创建索引,mysql,mysql,数据库

5. 模拟查询

1. 列出学生1选择的课程详细信息(包括学生名字,课程名称,授课老师,分数)

select
  si.name as stuName,
  ci.course_name as courseName,
  ti.name  as teacherName,
  sci.score 
from
  student_course_info as sci  
left join student_info si on sci.stu_id = si.id
left join course_info ci on ci .id  = sci.cou_id
left join teacher_info ti on ti.id  = ci.teacher_id 
where sci.stu_id = 1

as:取别名 可省略

mysql —案例复杂查询+索引使用+DBeaver中创建索引,mysql,mysql,数据库

2. 查询张三老师的所有课程

select 
  ci.course_name as teacherName,
  ti.name 
   from   course_info ci  
   left join teacher_info ti on ci.teacher_id  = ti.id 
   where ci.teacher_id =1

mysql —案例复杂查询+索引使用+DBeaver中创建索引,mysql,mysql,数据库
3. 查询所有学生选修的总学分,并且从高到低排序

desc:降序

asc: 升序

select
  si.name,
  sum(ci.course_score) as sumScore
from
  student_course_info sci
left join student_info si on sci.stu_id = si.id
left join course_info ci on ci.id = sci.cou_id
group by
  sci.stu_id
order by
  sumScore desc

mysql —案例复杂查询+索引使用+DBeaver中创建索引,mysql,mysql,数据库
6. 索引Type类型

我们可以使用explain来 查看索引类型

就比如 2. 查询张三老师的所有课程 这个sql 语句
mysql —案例复杂查询+索引使用+DBeaver中创建索引,mysql,mysql,数据库
mysql —案例复杂查询+索引使用+DBeaver中创建索引,mysql,mysql,数据库
type 列有 all 跟 const 两个类型,possible keys 就是我们使用到的索引,可以看到 类型为 all 的 索引为 null ,const 就是主键

这边有个 索引类型的级别:

system > const > eq_ref > ref > range > index > all

越左边 查询效率越快 ,all效率最低

没有索引的就是all,需要进行优化

这时候我们就需要给 course_info 加上索引了

where 条件后面的 teacher_id 需要加上索引

mysql —案例复杂查询+索引使用+DBeaver中创建索引,mysql,mysql,数据库
mysql —案例复杂查询+索引使用+DBeaver中创建索引,mysql,mysql,数据库
记得 Ctrl+S 保存

mysql —案例复杂查询+索引使用+DBeaver中创建索引,mysql,mysql,数据库
mysql —案例复杂查询+索引使用+DBeaver中创建索引,mysql,mysql,数据库
再来查询看看

mysql —案例复杂查询+索引使用+DBeaver中创建索引,mysql,mysql,数据库
可以看到级别变了,变成了ref ,可能现在数据量少没看出效率变化,只要数据量一多,就可以明显的感受到效率的提升不是一星半点文章来源地址https://www.toymoban.com/news/detail-542945.html

到了这里,关于mysql —案例复杂查询+索引使用+DBeaver中创建索引的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL索引:让你的数据库查询快到起飞!

    💕世界上最美好的东西之一,就是你每天都有机会开始全新的一天。💕 🐼作者:不能再留遗憾了🐼 🎆专栏:MySQL学习🎆 🚗本文章主要内容:详细介绍如何查看、创建和删除MySQL索引,以及MySQL索引的底层原理:B+树。🚗 各位朋友们,大家好!前面我们已经介绍了MySQL的库

    2024年02月09日
    浏览(47)
  • 【MySQL 数据库】6、一篇文章学习【索引知识】,提高大数据量的查询效率【文末送书】

    索引(index) 是帮助 MySQL 高效获取数据的数据结构(有序) 在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据, 这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是 索引 。 MySQL的索引是在存储引擎

    2024年02月08日
    浏览(67)
  • 【Mysql】X-DOC:Mysql数据库大量数据查询加速(定时JOB和存储过程应用案例)

    在某中台系统中,设计了大量的基础数据(维度数据、维度映射关系等)来支撑业务功能,业务表中存在大量的维度外键关联字段,其优点是可以实现前端的选择录入,数据校验,确保录入数据的准确性;缺点是在做业务报表时,需要做大量的维度关联(join)操作。 受限于

    2024年02月12日
    浏览(43)
  • mysql 负向条件查询不能使用索引

    负向条件查询不能使用索引,可以优化为in查询。 负向条件有:!=、、not in、not exists、not like等。 优化策略A:字段选择性 1、选择性较低索引 可能带来的性能问题 2、索引选择性=索引列唯一值/表记录数;(可执行show index from tableName命令看字段的Cardinality(散列程度)) 3、选

    2024年01月24日
    浏览(41)
  • DBeaver连接mysql、oracle数据库

    1) 下载DBeaver https://dbeaver.io/download/,并安装 2) 新建数据库连接    3)选择mysql驱动程序  4)填写连接设置内容 5)点击 “编辑驱动设置”,并填写相关信息  6)选择本地自己下载的驱动库jar包 (也可以点击下载驱动)  7)完成后,点击测试连接,可以查看是否连接成功

    2024年02月05日
    浏览(67)
  • 图数据库Neo4j——SpringBoot使用Neo4j & 简单增删改查 & 复杂查询初步

    图形数据库是专门用于存储图形数据的数据库,它使用图形模型来存储数据,并且支持复杂的图形查询。常见的图形数据库有Neo4j、OrientDB等。 Neo4j是用Java实现的开源NoSQL图数据库,本篇博客介绍如何在SpringBoot中使用Neo4j图数据库,如何进行简单的增删改查,以及如何进行复杂

    2024年02月06日
    浏览(62)
  • Java操作elasticSearch复杂查询以及解析数据以及索引保存数据

    说明:基于银行测试库的操作 es的银行测试库,看一个Kibana操作 然后用java检索解析这个数据 聚合搜索 address 中包含 mill 的所有人的年龄分布以及平均薪资 以下是分解思路实现步骤: #聚合搜索 address 中包含 mill 的所有人的年龄分布以及平均年龄 GET bank/_search { “query”:{ “

    2024年02月10日
    浏览(62)
  • 【从删库到跑路】MySQL数据库的索引(二)——索引的使用和选择

    🎊专栏【MySQL】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【The Right Path】 🥰欢迎并且感谢大家指出小吉的问题 🎈没有创建索引时,执行SQL语句,查看SQL的耗时 🎈 创建索引后 ,执行SQL语句,查看SQL的耗时 比较发现,时间减少了 🎈细节 创建索引 相

    2024年02月16日
    浏览(51)
  • MySQL数据库进阶第二篇(索引,SQL性能分析,使用规则)

    本篇博客深入详细地介绍了数据库索引的概念和重要性。内容包含:索引的概念和目标、索引的优点与缺点。此外,博客还深入解析了三种主要的索引结构:B-Tree、B+Tree和Hash,提供了详细的结构解析和优化方法,并通过插图进一步增强了理解。 博客的部分内容专注于对B-Tr

    2024年02月21日
    浏览(64)
  • 数据库实验一:基本表操作、基本数据查询和复杂数据查询

    按下图创建四个表:teacher、student、course和SC,为属性选择合适的域、合适的主码和外键约束,并为他们插入所列出数据; 中文语义 teacher (TID,TNAME,DEPT,SALARY) 教师(教工号,姓名,系,薪水) student (SID,SNAME,DEPT,AGE,GENDER) 学生(学号,姓名,系,年龄,性别) course (CID,CNAME,DE

    2024年02月01日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包