創建表
其余倆張邊在雙表優化的案例說過,過去直接復制即可
雙表優化
1 CREATE TABLE IF NOT EXISTS `phone` ( 2 `phoneid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, 3 `card` INT(10) UNSIGNED NOT NULL, 4 PRIMARY KEY (phoneid) 5 );
在開始前,分享給大家我看過覺得講數據庫講的算是很不錯的,也在B站擁有百萬播放量的教程。
這個MySQL視頻是動力節點的老杜講解,個人也很喜歡老杜的教學風格。
涵蓋了MySQL的相關知識,包括MySQL概述,MySQL應用環境,MySQL系統特性,MySQL初學基礎,MySQL管理工具,如何安裝MySQL及MySQL新特性等等。
學完這套視頻基本可掌握MySQL全套知識了,值得收藏學習,需要的小伙伴點擊以下鏈接👇
在線觀看:
最實用的MySQL教程視頻課程 - MySQL - 動力節點在線 (bjpowernode.com)
資料下載:
模擬數據
1 INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20))); 2 INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20))); 3 INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20))); 4 INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20))); 5 INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20))); I 6 INSERT INTO phone(card) VALUES(FLOOR(1 + (RAND() * 20)));
查詢語句
1 select * from class left join book on class.card=book.card left join phone on book.card=phone.card
分析語句
看到下面的語句,全部進行了全表掃描
1 explain select * from class left join book on class.card=book.card left join phone on book.card=phone.card
建立索引
在雙表優化中我們知道了,在使用left join時需要給右表添加索引,這是由左連接的特性決定的,left join 是明確左邊表的數據肯定都有,從右邊表進行查詢數據
根據我們之前的學習開始建立索引,那么這個索引就應該建立在book和phone上,那么下來我們開始建立索引
1 # 創建索引 2 create index ind_card on book(card) 3 create index ind_card on phone(card) 4 5 # 查看索引 6 show index from book 7 show index from phone
分析語句
此次優化總結
- 在進行雙表聯查時我們使用了left join
- 第一次在左邊的表加了索引
- 但是沒有效果
- 這是由左連接的特性決定的,left join 是明確左邊表的數據肯定都有,從右邊表進行查詢數據
- 所以右邊是關鍵,我們一定要加上索引
- 那么三表查詢也是同樣的,反正記住一點,左連接加右表,右連接加到左表
- 小表驅動大表
————————————————
原文鏈接:https://blog.csdn.net/fangkang7/article/details/105301532