在開始前,分享給大家我看過覺得講資料庫講的算是很不錯的,也在B站擁有百萬播放量的教程。

這個MySQL視訊是動力節點的老杜講解,個人也很喜歡老杜的教學風格,老杜真的是從MySQL基礎一點點帶我入門,基礎也學得很紮實。

這個教程總體來說就就像列文虎克教學,細到極致,妙到毫巔。

內容涵蓋了MySQL的相關知識,包括MySQL概述,MySQL應用環境,MySQL系統特性,MySQL初學基礎,MySQL管理工具,如何安裝MySQL及MySQL新特性等等。

學完這套視訊基本可掌握MySQL全套知識了,值得收藏學習,需要的小夥伴點選以下連結

線上觀看:

MySQL基礎入門-mysql教程-資料庫實戰(MySQL基礎+MySQL高階+MySQL優化+MySQL34道作業題)_嗶哩嗶哩 (゜-゜)つロ 乾杯~-bilibili

資料下載:

MySQL視訊教程全套免費下載【適合零基礎入門學習】 - 動力節點 (bjpowernode.com)

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