gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

總結(jié)分享之mysql慢查詢優(yōu)化的思路

本篇文章給大家?guī)砹岁P(guān)于mysql的相關(guān)知識,其中主要介紹了關(guān)于慢查詢優(yōu)化的相關(guān)問題,包括了利用慢查詢?nèi)罩径ㄎ宦樵僑QL、通過explain分析慢查詢SQL、修改SQL盡量讓SQL走索引,下面一起來看一下,希望對大家有幫助。

總結(jié)分享之mysql慢查詢優(yōu)化的思路

程序員必備接口測試調(diào)試工具:立即使用
Apipost = Postman + Swagger + Mock + Jmeter
Api設(shè)計、調(diào)試、文檔、自動化測試工具
后端、前端、測試,同時在線協(xié)作,內(nèi)容實時同步

推薦學(xué)習(xí):mysql視頻教程

1 慢查詢優(yōu)化思路

當發(fā)生慢查詢的時候,優(yōu)化的思路為:

  • 利用慢查詢?nèi)罩径ㄎ宦樵?SQL

  • 通過 explain 分析慢查詢 SQL

  • 修改 SQL,盡量讓 SQL 走索引

2 慢查詢?nèi)罩?/h2>

MySQL 提供了一個功能——慢查詢?nèi)罩荆瑫涗洸樵儠r間超過指定時間閾值的 SQL 到日志中,便于我們定位慢查詢并且優(yōu)化對應(yīng)的 SQL 語句。

首先查看 MySQL 中關(guān)于慢查詢相關(guān)的全局變量:

mysql> show global variables like '%quer%'; +----------------------------------------+-------------------------------+ | Variable_name                          | Value                         | +----------------------------------------+-------------------------------+ | binlog_rows_query_log_events           | OFF                           | | ft_query_expansion_limit               | 20                            | | have_query_cache                       | YES                           | | log_queries_not_using_indexes          | OFF                           | | log_throttle_queries_not_using_indexes | 0                             | ========================================================================== | long_query_time                        | 10.000000                     |【1】慢查詢的時間閾值 ========================================================================== | query_alloc_block_size                 | 8192                          | | query_cache_limit                      | 1048576                       | | query_cache_min_res_unit               | 4096                          | | query_cache_size                       | 16777216                      | | query_cache_type                       | OFF                           | | query_cache_wlock_invalidate           | OFF                           | | query_prealloc_size                    | 8192                          | ========================================================================== | slow_query_log                         | OFF                           |【2】慢查詢?nèi)罩臼欠耖_啟 | slow_query_log_file                    | /var/lib/mysql/Linux-slow.log |【3】慢查詢?nèi)罩疚募鎯ξ恢?========================================================================== +----------------------------------------+-------------------------------+ 15 rows in set (0.00 sec)
登錄后復(fù)制

這里主要關(guān)注三個變量:

  • long_query_time,慢查詢的時間閾值,單位秒,如果一個 SQL 語句的執(zhí)行時間超過這個值,那么 MySQL 就認定其為慢查詢

  • slow_query_log,慢查詢?nèi)罩竟δ苁欠耖_啟,默認關(guān)閉,開啟后記錄慢查詢

  • slow_query_log_file,慢查詢?nèi)罩疚募拇鎯ξ恢?/p>

默認慢查詢?nèi)罩竟δ苁顷P(guān)閉的,因此我們需要啟動該功能

# 開啟慢查詢?nèi)罩?mysql> set global slow_query_log=ON; Query OK, 0 rows affected (0.00 sec) # 設(shè)置慢查詢時間閾值 mysql> set long_query_time=1; Query OK, 0 rows affected (0.00 sec)
登錄后復(fù)制

這樣子設(shè)置后,MySQL 重啟會丟失這些配置,需要在配置文件中修改才會永久有效。

3 explain

我們可以使用 explain 分析 SQL 語句的執(zhí)行情況,例如:

mysql> explain select sum(1+2);
登錄后復(fù)制

執(zhí)行結(jié)果如下,可以看到有很多字段

總結(jié)分享之mysql慢查詢優(yōu)化的思路

我們主要看看一些重要的字段:

  • select_type 表示查詢語句的查詢類型,包括簡單查詢、子查詢等等

  • table 表示查詢的表,不一定是存在表,可能是本次查詢中得到的臨時表

  • type 表示檢索類型,使用全表掃描、還是索引掃描等

  • possible_keys表示可能使用的索引列

  • keys表示查詢中實際使用的索引列,由查詢優(yōu)化器決定

3.1 select_type 字段

總結(jié)分享之mysql慢查詢優(yōu)化的思路

3.2 type 字段

對于 InnoDB 存儲引擎,type列通常都是all或者index。

關(guān)于 type 字段的值,其從上到下對應(yīng)的 SQL 的執(zhí)行性能逐漸變差。

總結(jié)分享之mysql慢查詢優(yōu)化的思路

3.3 extra 字段

總結(jié)分享之mysql慢查詢優(yōu)化的思路

4 慢查詢例子

準備數(shù)據(jù),數(shù)據(jù)表結(jié)構(gòu):

create table user_info_large ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主鍵', `account` VARCHAR(20) NOT NULL COMMENT '用戶賬號', `name` VARCHAR(20) NOT NULL COMMENT '用戶名', `password` VARCHAR(20) not null COMMENT '用戶密碼', `area` VARCHAR(20) NOT NULL COMMENT '用戶地址', `signature` VARCHAR(50) not null COMMENT '個性簽名', PRIMARY KEY (`id`) COMMENT '主鍵', UNIQUE (`account`) COMMENT '唯一索引', KEY `index_area_signture` (`area`,  `signature`)  COMMENT '組合索引' );
登錄后復(fù)制

隨機生成 200w 條數(shù)據(jù)

mysql> select count(id) from user_info_large; +-----------+ | count(id) | +-----------+ |   2000000 | +-----------+ 1 row in set (0.38 sec)
登錄后復(fù)制

截取部分數(shù)據(jù):

總結(jié)分享之mysql慢查詢優(yōu)化的思路

執(zhí)行以下 SQL 語句,沒有使用任何索引字段:

SELECT name from user_info_large ORDER BY name desc limit 0,100000;
登錄后復(fù)制

Navicat 工具顯示的查詢時間如下,這并不是 MySQL 真正執(zhí)行 SQL 的時間,這里面包含了網(wǎng)絡(luò)傳輸?shù)葧r間:

總結(jié)分享之mysql慢查詢優(yōu)化的思路

SQL 具體的查詢時間可以查看慢查詢?nèi)罩荆?/p>

# Time: 2022-09-26T13:44:18.405459Z # User@Host: root[root] @  [ip]  Id:  1893 # Query_time: 10.162999  Lock_time: 0.000113 Rows_sent: 100000  Rows_examined: 2100000 SET timestamp=1664199858; SELECT name from user_info_large ORDER BY name desc limit 0,100000;
登錄后復(fù)制

關(guān)于其中一些信息的說明:

  • Time:SQL 執(zhí)行的開始時間

  • Query_time:SQL 語句查詢花費的時間,可以看到花費了 10 秒鐘

  • Lock_time:等待鎖表的時間

  • Rows_sent:語句返回的記錄數(shù)

  • Rows_examined:從存儲引擎中返回的記錄數(shù)

正在執(zhí)行的慢查詢是不會被記錄到慢查詢?nèi)罩镜模挥械却鋱?zhí)行完畢才會記錄到日志中。

我們可以使用 show processlist 查看正在執(zhí)行 SQL 的線程。

再執(zhí)行以下語句,使用索引 account 字段:

SELECT account from user_info_large ORDER BY account desc limit 0,100000;
登錄后復(fù)制

查看慢查詢?nèi)罩荆]有被記錄下來。

現(xiàn)在分別使用 explain 查看 SQL 語句的執(zhí)行情況:

explain SELECT name from user_info_large ORDER BY name desc limit 0,100000;
登錄后復(fù)制

分析情況如下:

總結(jié)分享之mysql慢查詢優(yōu)化的思路

可以看到?jīng)]有使用到索引,type 為 ALL 表示全表掃描,效率最差,并且 Extra 也是外部排序。

再看看這條 SQL 語句:

explain SELECT account from user_info_large ORDER BY account desc limit 0,100000;
登錄后復(fù)制

分析情況如下:

總結(jié)分享之mysql慢查詢優(yōu)化的思路

type 為 index,使用了索引,使用的索引字段為 account,Extra 顯示為使用索引排序。

因此,在實際開發(fā)中,我們可以針對慢查詢的 SQL,使用 explain 分析語句,根據(jù)分析情況以及索引的設(shè)計,重新設(shè)計 SQL 語句,讓 SQL 語句盡量走索引,走合適的索引。

5 優(yōu)化器與索引

在執(zhí)行 SQL 時,MySQL 的優(yōu)化器會根據(jù)情況選擇索引,但并不能保證其執(zhí)行時間一定最短,我們可以根據(jù)實際情況使用 force key (index) 讓 SQL 語句強制走某個索引。

例如,以下語句執(zhí)行后,key 字段為 account,并沒有走主鍵索引。

explain SELECT count(id) from user_info_large;
登錄后復(fù)制

總結(jié)分享之mysql慢查詢優(yōu)化的思路

如果使用 force key,就可以強制令語句走主鍵索引。

explain SELECT count(id) from user_info_large force key (PRIMARY);
登錄后復(fù)制

總結(jié)分享之mysql慢查詢優(yōu)化的思路

6 總結(jié)

在項目中如果發(fā)現(xiàn)部分 SQL 語句執(zhí)行緩慢,等待查詢時間長,可以考慮優(yōu)化慢查詢,具體思路為:

  • 通過慢查詢?nèi)罩径ㄎ?SQL

  • 使用 explain 分析 SQL

  • 修改 SQL,令其走合適的索引

在使用 explain 時,我們主要關(guān)注這些字段:

  • type

  • key

  • Extra

在編寫 SQL 使用索引的時候,我們盡量注意一下規(guī)則:

  • 模糊查詢不要使用通配符 % 開頭,例如 like '%abc'

  • 使用 or 關(guān)鍵字時,兩邊的字段都要有索引。或者使用 union 替代 or

  • 使用復(fù)合索引遵循最左原則

  • 索引字段不要參加表達式運算、函數(shù)運算

推薦學(xué)習(xí):mysql視頻教程

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
老司机午夜性大片| 最新天堂在线视频| 久草视频这里只有精品| xxww在线观看| 色婷婷激情视频| 你懂的av在线| mm131午夜| 国产二区视频在线播放| 在线观看的毛片| 成人免费网站入口| 日本免费一级视频| 狠狠躁狠狠躁视频专区| 欧美啪啪免费视频| 99日在线视频| 先锋影音男人资源| 国内外成人免费在线视频| 久久国产精品免费观看| 超碰97人人射妻| 欧美午夜小视频| 日本人视频jizz页码69| 色男人天堂av| 欧美性受xxxxxx黑人xyx性爽| 日韩成人手机在线| 国产视频在线视频| 97公开免费视频| 青青视频免费在线观看| 国产a视频免费观看| 精品久久久无码人妻字幂| 艳母动漫在线观看| 奇米影音第四色| 黄色一级片av| 欧美久久在线观看| 午夜免费福利网站| 一区二区三区国产好的精华液| 91精品999| 国产精品无码一本二本三本色| 在线观看成人免费| 免费超爽大片黄| 日韩欧美中文视频| 天美星空大象mv在线观看视频| 色悠悠久久综合网| 欧美污视频网站| 黄色大片中文字幕| 天天天干夜夜夜操| 精品视频一区二区在线| 国产精品久久久久9999爆乳| 99精品人妻少妇一区二区 | 国产av天堂无码一区二区三区| www.99r| 欧美专区第二页| 91在线视频观看免费| 女性女同性aⅴ免费观女性恋| 六月丁香婷婷激情| 五月天在线免费视频| mm131国产精品| 青青草视频在线免费播放| 久久久福利影院| 在线观看免费成人av| 无码人妻少妇伦在线电影| 人妻少妇被粗大爽9797pw| 日韩久久一级片| xxxx在线免费观看| 91九色国产ts另类人妖| 最新av网址在线观看| 牛夜精品久久久久久久| 国产精品夜夜夜爽张柏芝| 一级黄色特级片| 日韩a∨精品日韩在线观看| 在线观看的毛片| 国产精品久久久久久9999| www.午夜色| 中文字幕国产免费| 青青草原播放器| 永久免费在线看片视频| 91精品无人成人www| 五月天开心婷婷| 国产一二三在线视频| 亚洲国产日韩欧美在线观看| 欧美日韩久久婷婷| 蜜臀av.com| 天美一区二区三区| 亚洲中文字幕无码专区| 一路向西2在线观看| 人妻少妇被粗大爽9797pw| 久久国产这里只有精品| www.日本在线视频| 欧美日韩在线免费观看视频| 黄色一级片在线看| 日本黄大片一区二区三区| 精品一区二区中文字幕| 91九色国产ts另类人妖| 久草精品在线播放| 波多野结衣综合网| 狠狠躁狠狠躁视频专区| 成年女人18级毛片毛片免费| 97超碰免费观看| 一区二区三区网址| 丝袜人妻一区二区三区| 野外做受又硬又粗又大视频√| 午夜精品中文字幕| 免费观看精品视频| 日本三区在线观看| www插插插无码免费视频网站| 高清一区在线观看| www.com黄色片| 黄色一级二级三级| 福利在线一区二区| 人妻少妇精品久久| 男人天堂av片| 一级日本黄色片| 日韩一级片免费视频| 午夜精品免费看| 免费黄色一级网站| 小早川怜子一区二区三区| 国产一二三四在线视频| 久久久久久久久久久视频| 国产成人无码av在线播放dvd| 国产精品无码免费专区午夜| 看一级黄色录像| 免费 成 人 黄 色| 男女激情免费视频| 黄色影视在线观看| 国产二区视频在线播放| 欧美黄网站在线观看| 青青草精品视频在线| 欧洲av无码放荡人妇网站| 777米奇影视第四色| 亚洲免费av一区二区三区| 特级西西444www| 911av视频| 日韩精品一区二区三区久久| 日韩av在线中文| 亚洲精品第三页| 午夜宅男在线视频| 天堂一区在线观看| 亚洲免费黄色录像| 欧美激情视频免费看| 亚洲色成人www永久在线观看| 视色,视色影院,视色影库,视色网 日韩精品福利片午夜免费观看 | 一区二区在线免费看| 中文字幕av专区| 中日韩av在线播放| 女性隐私黄www网站视频| 久久久99精品视频| 免费拍拍拍网站| 蜜桃视频一区二区在线观看| 少妇人妻互换不带套| 一起操在线视频| 日韩福利视频在线| 69sex久久精品国产麻豆| jizzjizzxxxx| 成人区一区二区| 在线免费黄色小视频| 日韩视频在线视频| 国产成人强伦免费视频网站| 久久无码高潮喷水| 一区二区在线免费看| 欧美 日韩 激情| 欧美人成在线观看| 亚洲xxxx2d动漫1| 中文字幕第88页| 国产高清视频网站| 欧美男女爱爱视频| 毛片在线视频播放| 女人被男人躁得好爽免费视频 | 亚洲一二三区av| 欧美日韩一道本| 青青在线视频免费观看| 校园春色 亚洲色图| 波多野结衣xxxx| 丰满的少妇愉情hd高清果冻传媒| 免费在线观看日韩视频| 免费看黄在线看| 四虎4hu永久免费入口| 女女同性女同一区二区三区按摩| 92看片淫黄大片一级| 热99这里只有精品| 国产精品网站免费| 国产高清av在线播放| 日韩a级在线观看| a级免费在线观看| 亚洲熟妇无码一区二区三区导航| 国产一区二区片| 亚洲一区二区三区av无码| 农民人伦一区二区三区| 亚洲理论电影在线观看| 国产免费毛卡片| 亚洲色图 在线视频| 在线观看日本www| 水蜜桃在线免费观看| 丝袜人妻一区二区三区| 日本wwww视频| 第四色婷婷基地| 99热一区二区三区| 日本三日本三级少妇三级66| 国产日韩欧美大片| 亚洲爆乳无码专区| 中国 免费 av| 国产男女在线观看| 国产精品自在自线|