成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

分析SQL執行時間及查詢執行計劃(附數據庫和一千萬數據)

數據庫 MySQL
我們干開發面試工作的時候,發現對數據庫的面試比重很大。說明對數據庫的知識掌握對我們程序員越來越重要了。接下來這篇文章我們來看看如何分析我們的sql執行效率。首先找到執行慢的sql,然后對執行慢的SQL進行分析。

[[360007]]

 我們干開發面試工作的時候,發現對數據庫的面試比重很大。說明對數據庫的知識掌握對我們程序員越來越重要了。接下來這篇文章我們來看看如何分析我們的sql執行效率。首先找到執行慢的sql,然后對執行慢的SQL進行分析。

一 準備數據

在分析之前是不是有這樣的困惑,我的數據量這么少。我如何分析SQL執行效率。不要慌,我們已準備了一千萬條數據。接下來看看如何將這一千萬條數據快速導入到數據庫中。

1. 創建表和導入一千萬條數據

表和數據地址(gitee) https://gitee.com/flowerAndJava/millions_data


2. 大批量數據導入數據

a 將數據庫導入服務器中(如果是windows系統,這步省略)

b 創建一個數據庫

  1. 創建數據庫(db2),表tb_sku 

c 命令行登錄數據庫

  1. mysql -u 用戶名 -p 密碼 ; 

d 切換到使用的數據庫

  1. use db2; 

e 使用命令

  1. load data local infile '/tmp/tb_sku1.sql' into table `tb_sku` fields terminated by ',' lines terminated by '\n'

對命令解釋: '/tmp/tb_sku1.sql' 數據的目錄(windows目錄例如:D:\life\tb_sku1.sql),tb_sku 要導入到的表。

 

 

 

注意

我們之前使用insert的sql將數據導入到數據庫中,但是往庫中導入上千萬數據會需要很久時間。

二 慢查詢分析(查找執行時間長的sql)

2.1 show profiles

show profiles是mysql提供可以用來分析當前會話中語句執行的資源消耗情 況??梢杂脕鞸QL的調優測量。

2.1.1 設置MySQL支持profile

1. 查看是否支持

  1. select @@have_profiling 

 

結果為YES,代表支持。

2. 查看profiling(profiling默認是關閉的)

  1. select @@profiling 

 

結果為0,代表沒有開啟

3. 開啟profiling

  1. set profiling=1;  

2.1.2 show profiles的使用

1. 輸入一系列查詢語句

  1. show databases; 
  2. use db01; 
  3. show tables; 
  4. select * from tb_ksu where id < 5; 
  5. select count(*) from tb_ksu; 

2. 查看沒一條SQL執行時間

  1. show profiles;    //如果執行沒有反應,查看profiling是否開啟了,命令為select @@profiling;  

 

查看沒每一條sql執行時間。

3. 查詢每一條sql每個階段執行時間

  1. select profile for query 6;   //6,代表Query_ID 

 

上圖解釋

  1. Sending data MySQL線程開始訪問數據行并把結果返回給客戶端,而不僅僅是 
  2. 返回給客戶端。在Sending data狀態下,MySQL線程往往進行大量的磁盤讀取 
  3. 操作,所以在查詢中最耗時的狀態。 

4. 查看線程在什么資源上耗費過高 (類型 all、cpu、block io 、context、switch、page faults)

  1. show profile cpu for query 7; 

 

上圖說明


2.2 慢查詢日志

慢查詢日志記錄了所有執行時間超過參數(long_query_time)設置值并且掃描 記錄數不少于min_examined_row_limit,的所有SQL日志。long_query_time默 認為10秒,最小為0,精度可以到微秒。

2.2.1 設置慢查詢日志

1. 修改配置文件(慢查詢日志默認關閉的) 修改配置文件命令 vi /etc/my.cnf 然后在配置文件最下方加入下面配置

  1. # 該參數用來控制慢查詢日志是否開啟,可取值:1和0,1代表開啟,0代表關閉 
  2. slow_query_log=1 
  3. #該參數用來指定慢查詢日志的文件名 
  4. slow_query_log_file=slow_query.log 
  5. #該選項用來配置查詢的時間限制, 超過這個時間將認為是慢查詢, 將進行日志記錄, 默認10s 
  6. long_query_time=10 

2. 重啟mysql服務

  1. service mysqld restart 

備注

如果執行命令報如下錯誤


請使用命令 systemctl restart mysqld.service

3. 查看慢查詢日志目錄

  1. cd /var/lib/mysql 

2.2.2 日志讀取

1. 查詢long_query_time的值

  1. show variables like 'long%'

 

2. 執行查詢操作

  1. select * from tb_sku where id = '100000030074'\G; 
  2. select * from tb_sku where name like '%HuaWei手機Meta87384 Pro%'\G; 

3. 查詢慢查詢日志

a 使用cat


b 如果慢查詢日志很多,借助借助于mysql自帶的mysqldumpslow工具,進行分類匯總

 

三 explain執行計劃、索引使用和SQL優化

通過以上步驟查詢到效率低的SQL語句后,可以通過EXPLAIN命令獲取Mysql如何執行Select語句信息,包含select語句執行過程中表如何連接和連接的順序。

3.1 執行explain命令,進行分析

  1. explain select * from tb_sku where id = '100000030074'

 

  1. explain select * from tb_sku where name like '%HuaWei 手機Meta87384 Pro%'

 

執行計劃字段解釋


3.2 對字段取值解釋

1. id

  1. A. id 相同表示加載表的順序是從上到下。 
  2. B. id 不同id值越大,優先級越高,越先被執行。 
  3. C. id 有相同,也有不同,同時存在。id相同的可以認為是一組,從上往下順序執行;在所有的組中,id的值越大,優先級越高,越先執行。 

2. select_type


3. type

 

結果由好到壞

  1. NULL > system > const > eq_ref > ref > fulltext > ref_or_null > index_merge >unique_subquery > index_subquery > range > index > ALL 
  2.  
  3. system > const > eq_ref > ref > range > index > ALL 

4. key

  1. A. possible_keys : 顯示可能應用在這張表的索引, 一個或多個。 
  2. B. key : 實際使用的索引, 如果為NULL, 則沒有使用索引。 
  3. C. key_len : 表示索引中使用的字節數, 該值為索引字段最大可能長度,并非實際使用長度,在不損失精確性的前提下, 長度越短越好 。 

5. rows

  1. 掃描行的數量。 

6. filtered

  1. 這個字段表示存儲引擎返回的數據在server層過濾后,剩下多少滿足查詢的記錄數量的比例。 

總結這篇文章可以分為三個點。

1 往數據庫導入一千萬數據,查看上面文章,按照步驟操作沒有任何問題。

2 查找慢查詢語句,查看慢查詢日志。按照命令執行就好

3 對sql執行進行分析,查看sql是否使用索引和執行效率。

 

責任編輯:姜華 來源: 花花和Java
相關推薦

2020-12-04 11:00:18

MySQL執行時間執行計劃

2011-08-18 09:19:19

SQL Server的SQL查詢優化

2011-09-14 17:03:17

數據庫執行計劃解析

2024-12-17 14:52:46

2010-09-08 15:00:03

SQL語句執行

2017-09-22 11:01:00

Oracle數據庫中直方圖

2015-04-22 14:17:45

SQL SERVERMSSQL SERVE緩沖區

2010-09-06 13:17:19

SQL Server語句

2022-12-13 08:36:42

D-SMARTOracle數據庫

2019-12-25 14:55:35

數據庫MySQLOracle

2024-09-12 15:16:14

2024-06-12 09:23:37

2024-07-03 13:51:02

SQL毛刺數據庫

2018-07-18 15:13:56

MCU代碼時間

2021-02-24 11:44:35

語言計算函數嵌入式系統

2011-03-16 11:17:30

DB2數據庫執行計劃

2010-11-04 14:35:38

DB2 sql文執行計

2009-11-18 17:05:47

捕獲Oracle SQ

2019-11-28 08:31:21

Oracle數據庫索引

2010-08-13 13:12:19

DB2數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人精品一区亚洲午夜久久久 | 国产美女在线观看 | 久久免费精品 | 久色 | 久久久久久久av | 欧美日韩不卡合集视频 | 亚洲精品在线视频 | 亚洲精品一区二区三区蜜桃久 | 天堂在线一区 | 欲色av| 欧美性久久久 | 精品日本久久久久久久久久 | 久久久久国产精品午夜一区 | 亚洲欧美日韩精品久久亚洲区 | 香蕉视频91| 亚洲久草视频 | 97精品一区二区 | 成人国产综合 | 欧美1区2区 | 免费看一区二区三区 | 涩涩视频网站在线观看 | 伊人网站在线 | 国产视频中文字幕在线观看 | 国产激情一区二区三区 | 三级视频久久 | 成人av电影在线 | 欧美aaaaa | 久草热视频 | 国产午夜精品久久久 | 人人草人人干 | 奇米四色影视 | 亚洲第一黄色网 | 久久国产精品免费一区二区三区 | 亚洲视频一区在线播放 | 国产 欧美 日韩 一区 | 一二三区在线 | 久久精品99久久 | 久久久久久久一区二区 | 人成在线视频 | 国产一区二区三区四区三区四 | 亚洲国产精品一区在线观看 |