在開始前,分享給大家我看過覺得講資料庫講的算是很不錯的,也在B站擁有百萬播放量的教程。
這個MySQL視訊是動力節點的老杜講解,個人也很喜歡老杜的教學風格,老杜真的是從MySQL基礎一點點帶我入門,基礎也學得很紮實。
這個教程總體來說就就像列文虎克教學,細到極致,妙到毫巔。
內容涵蓋了MySQL的相關知識,包括MySQL概述,MySQL應用環境,MySQL系統特性,MySQL初學基礎,MySQL管理工具,如何安裝MySQL及MySQL新特性等等。
學完這套視訊基本可掌握MySQL全套知識了,值得收藏學習,需要的小夥伴點選以下連結
線上觀看:
MySQL基礎入門-mysql教程-資料庫實戰(MySQL基礎+MySQL高階+MySQL優化+MySQL34道作業題)_嗶哩嗶哩 (゜-゜)つロ 乾杯~-bilibili
資料下載:
sql建立程式碼
1 CREATE TABLE IF NOT EXISTS `article` (
2 `id` INT(10) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
3 `author_id` INT(10) UNSIGNED NOT NULL,
4 `category_id` INT(10) UNSIGNED NOT NULL,
5 `views` INT(10) UNSIGNED NOT NULL,
6 `comments` INT(10) UNSIGNED NOT NULL,
7 `title` VARBINARY(255) NOT NULL,
8 `content` TEXT NOT NULL
9 );
新增測試資料
1 INSERT INTO `article` ( `author_id`, `category_id`,`views`,`comments`, `title` ,`content`) VALUES
2 (1, 1,1,1,'1','1'),
3 (2,2,2,2, '2', '2'),
4 (1, 1,3,3,'3', '3');
查詢表資料
sql需求:
查詢category_ id 為1且comments大於1的情況下,views最多的文章ID
寫出SQL語句並執行
1 select id,author_id from article where category_id=1 and comments>1 order by views;
可以對比上邊表資料對照看
初步分析SQL語句
可以看到進行了全表掃描,並且使用了檔案排序 這種SQL是必須進行優化的
建立索引
1 # 建立索引
2 create index ind_article_ccv on article(category_id,comments,views);
3
4 # 查看錶的所有索引
5 show index from article
在次使用explain分析
1 explain select id,author_id from article where category_id=1 and comments>1 order by views;
發現全表掃描我們解決了,但是檔案排序還沒有解決。那麼這個方案也是不可以的
刪除索引
1 # 刪除索引
2 drop index ind_article_ccv on article
3
4 # 查看錶的所有索引
5 show index from article
重新建立索引,並檢視分析
那麼我們在來給caterory_id和view建立一個索引
1 # 建立索引
2 create index ind_article_cv on article(category_id,views);
3
4 # 分析語句
5 explain select id,author_id from article where category_id=1 and comments>1 order by views;
此次優化總結
- 在第一次給三個欄位都加上索引後,type變成了range這個是可以忍受的,但是extra裡使用了filesort仍是無法忍受的
- 但是我們已經給他們三個欄位建立了索引了,為什麼沒有用呢?
- 這是因為根據Btree索引的工作原理
- 先進行排序category_id
- 如果遇到相同的category_id則在排序comments,如果在遇到comments則再排序views
- 當comments欄位在聯合索引裡處於中間位置時
- 因為comments>1是一個範圍值(所謂range)
- MySQL無法利用索引在對後邊的views部分進行檢索,即range型別查詢欄位後面的索引會失效
————————————————
原文連結:https://blog.csdn.net/fangkang7/article/details/105282077