久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

總結分享之mysql慢查詢優化的思路

本篇文章給大家帶來了關于mysql的相關知識,其中主要介紹了關于慢查詢優化的相關問題,包括了利用慢查詢日志定位慢查詢SQL、通過explain分析慢查詢SQL、修改SQL盡量讓SQL走索引,下面一起來看一下,希望對大家有幫助。

總結分享之mysql慢查詢優化的思路

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

推薦學習:mysql視頻教程

1 慢查詢優化思路

當發生慢查詢的時候,優化的思路為:

  • 利用慢查詢日志定位慢查詢 SQL

  • 通過 explain 分析慢查詢 SQL

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

2 慢查詢日志

MySQL 提供了一個功能——慢查詢日志,會記錄查詢時間超過指定時間閾值的 SQL 到日志中,便于我們定位慢查詢并且優化對應的 SQL 語句。

首先查看 MySQL 中關于慢查詢相關的全局變量:

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】慢查詢日志是否開啟 | slow_query_log_file                    | /var/lib/mysql/Linux-slow.log |【3】慢查詢日志文件存儲位置 ========================================================================== +----------------------------------------+-------------------------------+ 15 rows in set (0.00 sec)
登錄后復制

這里主要關注三個變量:

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

  • slow_query_log,慢查詢日志功能是否開啟,默認關閉,開啟后記錄慢查詢

  • slow_query_log_file,慢查詢日志文件的存儲位置

默認慢查詢日志功能是關閉的,因此我們需要啟動該功能

# 開啟慢查詢日志 mysql> set global slow_query_log=ON; Query OK, 0 rows affected (0.00 sec) # 設置慢查詢時間閾值 mysql> set long_query_time=1; Query OK, 0 rows affected (0.00 sec)
登錄后復制

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

3 explain

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

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

執行結果如下,可以看到有很多字段

總結分享之mysql慢查詢優化的思路

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

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

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

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

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

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

3.1 select_type 字段

總結分享之mysql慢查詢優化的思路

3.2 type 字段

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

關于 type 字段的值,其從上到下對應的 SQL 的執行性能逐漸變差。

總結分享之mysql慢查詢優化的思路

3.3 extra 字段

總結分享之mysql慢查詢優化的思路

4 慢查詢例子

準備數據,數據表結構:

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 '組合索引' );
登錄后復制

隨機生成 200w 條數據

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

截取部分數據:

總結分享之mysql慢查詢優化的思路

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

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

Navicat 工具顯示的查詢時間如下,這并不是 MySQL 真正執行 SQL 的時間,這里面包含了網絡傳輸等時間:

總結分享之mysql慢查詢優化的思路

SQL 具體的查詢時間可以查看慢查詢日志:

# 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;
登錄后復制

關于其中一些信息的說明:

  • Time:SQL 執行的開始時間

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

  • Lock_time:等待鎖表的時間

  • Rows_sent:語句返回的記錄數

  • Rows_examined:從存儲引擎中返回的記錄數

正在執行的慢查詢是不會被記錄到慢查詢日志的,只有等待其執行完畢才會記錄到日志中。

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

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

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

查看慢查詢日志,并沒有被記錄下來。

現在分別使用 explain 查看 SQL 語句的執行情況:

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

分析情況如下:

總結分享之mysql慢查詢優化的思路

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

再看看這條 SQL 語句:

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

分析情況如下:

總結分享之mysql慢查詢優化的思路

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

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

5 優化器與索引

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

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

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

總結分享之mysql慢查詢優化的思路

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

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

總結分享之mysql慢查詢優化的思路

6 總結

在項目中如果發現部分 SQL 語句執行緩慢,等待查詢時間長,可以考慮優化慢查詢,具體思路為:

  • 通過慢查詢日志定位 SQL

  • 使用 explain 分析 SQL

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

在使用 explain 時,我們主要關注這些字段:

  • type

  • key

  • Extra

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

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

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

  • 使用復合索引遵循最左原則

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

推薦學習:mysql視頻教程

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
亚洲涩涩在线| 久久精品亚洲| 91精品国产91久久久久久黑人| 国产精品玖玖玖在线资源| 天堂久久av| 日本午夜精品视频在线观看| 久久精品xxxxx| 久久国际精品| 国产精品亚洲人成在99www| 国产欧美日韩一区二区三区四区 | 久久久久久黄| 亚洲国产专区| 三级亚洲高清视频| 97久久超碰| 色狠狠一区二区三区| 国产欧美精品| 黄色aa久久| 激情久久久久久久| 久久国产精品毛片| 国产一区 二区| 国产成年精品| 蜜臀91精品国产高清在线观看| 日韩视频在线一区二区三区 | 日韩精品亚洲专区在线观看| 日韩国产成人精品| 国产精品chinese| 久久91视频| 欧美午夜精彩| 久久国产成人| 国产精品极品国产中出| 午夜精品成人av| 石原莉奈在线亚洲二区| 久久99精品久久久野外观看| 久久电影tv| 日韩视频免费| 亚洲人妖在线| 精品国产三区在线| 亚洲大全视频| 亚洲欧美网站在线观看| 国产美女亚洲精品7777| 欧美好骚综合网| 亚洲一区国产| 欧美国产三级| 欧美91福利在线观看| 日韩精品乱码av一区二区| 国产一区二区三区日韩精品 | 日韩欧美在线中字| 老牛影视一区二区三区| 国产视频网站一区二区三区| 91一区二区| 免费在线观看不卡| 91青青国产在线观看精品| 视频在线观看国产精品| 精品国产精品国产偷麻豆| 合欧美一区二区三区| 国产精品调教| 亚洲欧美日韩专区| 色爱综合网欧美| 日韩中文字幕亚洲一区二区va在线| 麻豆免费精品视频| 免费一级片91| 一本大道色婷婷在线| 色综合视频一区二区三区日韩 | 日本天堂一区| 亚洲视频www| 国产精品一卡| 黄色成人精品网站| 国产一区二区三区精品在线观看| 91精品91| 国内精品美女在线观看| 婷婷精品在线| 99久久精品网| 精品一区二区三区视频在线播放| 亚洲毛片在线| 国产91精品对白在线播放| 欧美日韩亚洲一区三区| 国产亚洲欧洲| 樱桃视频成人在线观看| 欧美日韩亚洲三区| 国产精品毛片一区二区三区| 国产福利91精品一区二区| 午夜久久av | 亚洲精品中文字幕乱码| 久久久久久久久成人| 在线国产日韩| 欧美亚洲在线日韩| 欧美极品中文字幕| 亚洲影视一区二区三区| 91九色精品国产一区二区| 岛国av免费在线观看| 国产精品永久| 日韩精品福利一区二区三区| 日韩一级欧洲| 欧美特黄一区| 亚洲成av在线| 国产一区二区三区亚洲| 国产欧美自拍| 性色av一区二区怡红| 亚洲福利免费| 国产在线观看www| 久久影院资源站| 日本综合精品一区| 日韩在线a电影| 国产一区二区三区自拍| 中国字幕a在线看韩国电影| 国产精品毛片aⅴ一区二区三区| 免费不卡在线观看| 国产精品外国| 亚洲欧美日本视频在线观看| 亚洲精品国产偷自在线观看| 久久久久99| 久久激情中文| 亚洲女同av| 成人日韩av| 中文字幕色婷婷在线视频| 狂野欧美性猛交xxxx| 国产精品夜夜夜| 国产精品免费精品自在线观看| 青青在线精品| 国产亚洲一区二区三区不卡| 国产亚洲久久| 美日韩一区二区三区| 国产精品网址| 精品亚洲a∨一区二区三区18| 麻豆高清免费国产一区| 精品免费视频| 精品丝袜在线| 色婷婷狠狠五月综合天色拍| 日韩电影二区| 欧美69视频| 国产精品毛片在线| 免费成人性网站| 色狠狠一区二区三区| 日韩高清欧美激情| 国产欧美一区二区三区米奇| 日韩av二区在线播放| 欧美日本精品| 久久精品免费看| 国产一二在线播放| 麻豆精品蜜桃| 欧美日韩免费观看一区=区三区| 久热精品在线| 日韩av一二三| 7777精品| 精品美女在线视频| 亚洲精品.com| 亚洲欧美日韩国产综合精品二区 | 国产亚洲在线观看| 亚洲最新av| 国产麻豆精品| 福利在线免费视频| 亚洲精品中文字幕乱码| 亚洲精品亚洲人成在线观看| 欧美日韩亚洲一区在线观看| 国产成人免费| 在线观看免费一区二区| 免费不卡在线观看| 国产精品毛片aⅴ一区二区三区| 麻豆mv在线观看| 中文精品视频| 国产精品3区| 欧美亚洲日本精品| 免费视频久久| 国产精品久久久久久久久久齐齐 | 欧美在线观看视频一区| 伊人久久亚洲美女图片| 婷婷精品久久久久久久久久不卡| 奇米亚洲欧美| 88xx成人免费观看视频库| 免费美女久久99| 免费在线成人| 尤物网精品视频| 国产毛片精品| 免费毛片在线不卡| 911精品国产| 欧美午夜精品一区二区三区电影| 视频一区中文字幕精品| 国产白浆在线免费观看| 在线亚洲欧美| 久久精品国产久精国产| 怡红院精品视频在线观看极品| 国产日韩三级| 日韩在线综合| 日本a级不卡| 欧美精品资源| 久久黄色影视| 欧美日韩国产一区精品一区| 国产精品一区免费在线| 欧美日韩在线观看视频小说| 日韩不卡一区二区三区| 久久香蕉国产| 国产欧美日韩免费观看| 日韩免费高清| 久久精品 人人爱| 欧美日韩国产探花| 久久精品国产在热久久| 亚洲精品系列| 日韩欧美精品一区| 欧美亚洲三级| 国产亚洲高清视频|