MySQL?原理優(yōu)化之Group?By的優(yōu)化技巧
今天來看看MySQL 中如何多Group By 語句進行優(yōu)化的。
先創(chuàng)建tb_user 表如下:

通過show index from tb_user; 命令查看表,沒有存在任何的索引。

執(zhí)行如下代碼,查看SQL 執(zhí)行情況
explain select profession, count(*) from tb_user group by profession ;

發(fā)現(xiàn)返回結果中 type 為“ALL” ,Extra 返回“Using temporary” 說明沒有使用索引。
于是,創(chuàng)建基于profession,age和status 的索引如下:
create index index_user_pro_age_sta on tb_user(profession ,age, status);
這里創(chuàng)建索引從左到右的順序是 profession ,age, status。
此時再次執(zhí)行SQL執(zhí)行計劃如下:
explain select profession, count(*) from tb_user group by profession ;

發(fā)現(xiàn)使用了索引“index_user_pro_age_sta”。說明在執(zhí)行 group by操作的時候,使用聯(lián)合索引是有效的。
接著在看使用如下代碼:
explain select age, count(*) from tb_user group by age;
SQL 語句使用age 進行group by,查看explain的結果如下:

在Extra 字段中發(fā)現(xiàn)使用了“Using temporary”,說明沒有走索引,是因為沒有滿足索引的最左前綴法則。
聯(lián)合索引 index_user_pro_age_sta的順序從左到右分別是 profession ,age, status。
上面的SQL 語句Group by 后面接著的是age ,因此出現(xiàn)“Using temporary”。
這里對SQL 進行修改。如下:
explain select profession,age, count(*) from tb_user group by profession, age;

由于group by 后面跟著profession, age ,符合聯(lián)合索引的創(chuàng)建順序,因此索引生效。
我們再來試試再加入過濾條件的情況,加入profession = 軟件工程,此時group by 里面只顯示 age,那么此時是否會走索引, 答案是 using index。因為滿足了最左前綴法則。
explain select age, count(*) from tb_user where profession = '軟件工程' group by age;

總結一下:
SQL在分組操作的時候,可以通過索引來提高效率。做分組操作的時候,索引的使用需要滿足最左前綴法則。
到此這篇關于MySQL 原理優(yōu)化之Group By的優(yōu)化技巧的文章就介紹到這了,更多相關MySQLGroup By優(yōu)化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Django2.* + Mysql5.7開發(fā)環(huán)境整合教程圖解
這篇文章主要介紹了Django2.* + Mysql5.7開發(fā)環(huán)境整合教程,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09
MySQL提取Json內(nèi)部字段轉儲為數(shù)字
本文主要介紹了MySQL提取Json內(nèi)部字段轉儲為數(shù)字,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧2021-07-07
MySQL5.73?root用戶密碼修改方法及ERROR?1193、ERROR1819與ERROR1290報錯解決
這篇文章主要給大家介紹了關于MySQL5.73?root用戶密碼修改方法及ERROR?1193、ERROR1819與ERROR1290:...?running?with?--skip-...報錯的解決方法,文中通過圖文將解決的步驟介紹的非常詳細,需要的朋友可以參考下2023-02-02
MySQL如何快速批量插入1000w條數(shù)據(jù)
這篇文章主要給大家介紹了關于MySQL如何快速批量插入1000w條數(shù)據(jù)的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-03-03

