MySQL優化|一分鐘帶你了解單表優化
- 2021 年 5 月 26 日
- 筆記
在開始前,分享給大家我看過覺得講數據庫講的算是很不錯的,也在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類型查詢字段後面的索引會失效
————————————————
原文鏈接://blog.csdn.net/fangkang7/article/details/105282077