前言
接上章 我們 對一個簡單的選課功能進(jìn)行 設(shè)計分析
實(shí)際上在工作中 拿到一個需求,也是這樣的一個分析過程
一個份 需求文檔+原型 出來,只要是你負(fù)責(zé)這個模塊,就需要你自己建表建庫,設(shè)計接口文檔,也許現(xiàn)在有的公司會有一個帶你的大哥會幫你建表建庫【甚至接口文檔都幫你寫好了,你只需要按照接口進(jìn)行開發(fā)】,那也只是初步的【實(shí)習(xí)生】,到后面還是得靠自己
再有的公司是需要開發(fā)人員寫概要設(shè)計(里面就包含數(shù)據(jù)庫設(shè)計)的 , 但總的來說是八九不離十,分析步驟還是一樣的
案例
我們一步一步來,先造一些數(shù)據(jù)
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');
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','學(xué)生2',0,'物聯(lián)網(wǎng)工程二班',1,'2022-11-15 10:11:25',1,'2022-11-15 10:11:25',23);
3.course_info
比如
老師張三 有兩門課 一門微積分 一門 java基礎(chǔ)
老師李四 有一門課 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’,‘?dāng)?shù)學(xué)’,4,1,‘2022-11-15 10:11:25’,1,‘2022-11-15 10:11:25’);
4 .student_course_info
選課表
學(xué)生1 選了張三 老師的 微積分 + 李四老師的 SpringCloud概論
學(xué)生2 選了張三 老師的 java基礎(chǔ)
-- 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');
5. 模擬查詢
1. 列出學(xué)生1選擇的課程詳細(xì)信息(包括學(xué)生名字,課程名稱,授課老師,分?jǐn)?shù))
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:取別名 可省略
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
3. 查詢所有學(xué)生選修的總學(xué)分,并且從高到低排序
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
6. 索引Type類型
我們可以使用explain來 查看索引類型
就比如 2. 查詢張三老師的所有課程 這個sql 語句
type 列有 all 跟 const 兩個類型,possible keys 就是我們使用到的索引,可以看到 類型為 all 的 索引為 null ,const 就是主鍵
這邊有個 索引類型的級別:
system > const > eq_ref > ref > range > index > all
越左邊 查詢效率越快 ,all效率最低
沒有索引的就是all,需要進(jìn)行優(yōu)化
這時候我們就需要給 course_info 加上索引了
where 條件后面的 teacher_id 需要加上索引
記得 Ctrl+S 保存
再來查詢看看文章來源:http://www.zghlxwxcb.cn/news/detail-542945.html
可以看到級別變了,變成了ref ,可能現(xiàn)在數(shù)據(jù)量少沒看出效率變化,只要數(shù)據(jù)量一多,就可以明顯的感受到效率的提升不是一星半點(diǎn)文章來源地址http://www.zghlxwxcb.cn/news/detail-542945.html
到了這里,關(guān)于mysql —案例復(fù)雜查詢+索引使用+DBeaver中創(chuàng)建索引的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!