mysql 慢查詢

來源:互聯網
上載者:User

標籤:convert   設定   rman   慢查詢   合并   from   路徑   序列   修改   

開啟慢查詢日誌

在設定檔my.cnf或my.ini中在 [mysqld] 一行下面加入兩個配置參數

slow_query_log = on     #開啟慢查詢long_query_time=1       #設定慢查詢時間 1 sslow_query_log_file="D:/phpStudy/MySQL/data/slow_query.log"    #慢查詢日誌儲存路徑 未指定slow_query_log_file的情況下,會自動產生一個以主機名稱+‘slow‘.log 的檔案log-queries-not-using-indexes = on   #開啟記錄沒有使用索引查詢語句

 

sql 查看慢查詢配置
show status like ‘slow_queries‘;    #慢查詢的次數 (預設是慢查詢時間10s)show variables like ‘long_query_time‘ ;   //可以顯示當前慢查詢時間set long_query_time=1 ;    //可以修改慢查詢時間 當前會話有效,永久有效請修改設定檔

 

慢查詢記錄到日誌

在預設情況下,低版本的mysql不會記錄慢查詢,需要在啟動mysql時候,指定記錄慢查詢才可以

bin\mysqld.exe –log-slow-queries=D:/abc.log [低版本mysql5.0可以在my.ini指定]

該慢查詢日誌在mysql5.0這個版本中時放在 mysql安裝目錄/data/下;

針對 mysql5.5啟動慢查詢有兩種方法

  ① bin\mysqld.exe - -safe-mode - -slow-query-log

  ②在my.ini 檔案中配置 [mysqld] 添加slow-query-log = on # 開啟慢查詢這個功能

可以通過  slow_query_log_file="日誌存放位置"指定目錄,預設存放在 mysql5.5.19是在my.ini 的 datadir=“目錄” ;

在mysql5.6中,預設是開機記錄慢查詢的,my.ini其中有一個配置項 slow-query-log=1;

 

慢查詢sql語句 explain分析

Explain sql語句;

會產生如下資訊:

id: 這是SELECT的查詢序號

select_type: 表示查詢的類型。

SIMPLE 簡單的 select 查詢,不使用 union 及子查詢
PRIMARY 最外層的 select 查詢
UNION UNION 中的第二個或隨後的 select 查詢,不 依賴於外部查詢的結果集
DEPENDENT UNION UNION 中的第二個或隨後的 select 查詢,依 賴於外部查詢的結果集
SUBQUERY 子查詢中的第一個 select 查詢,不依賴於外 部查詢的結果集
DEPENDENT SUBQUERY 子查詢中的第一個 select 查詢,依賴於外部 查詢的結果集
DERIVED 用於 from 子句裡有子查詢的情況。 MySQL 會 遞迴執行這些子查詢, 把結果放在暫存資料表裡。
UNCACHEABLE SUBQUERY 結果集不能被緩衝的子查詢,必須重新為外 層查詢的每一行進行評估。
UNCACHEABLE UNION UNION 中的第二個或隨後的 select 查詢,屬 於不可快取的子查詢

table: 輸出結果集的表

type: 表示表的連線類型  

system           表僅有一行(=系統資料表)。這是 const 連線類型的一個特例。
const const 用於用常數值比較 PRIMARY KEY 時。當 查詢的表僅有一行時,使用 System。
eq_ref const 用於用常數值比較 PRIMARY KEY 時。當 查詢的表僅有一行時,使用 System。
ref 串連不能基於關鍵字選擇單個行,可能尋找 到多個合格行。 叫做 ref 是因為索引要 跟某個參考值相比較。這個參考值或者是一 個常數,或者是來自一個表裡的多表查詢的 結果值。
ref_or_null 如同 ref, 但是 MySQL 必須在初次尋找的結果 裡找出 null 條目,然後進行二次尋找。
index_merge 說明索引合并最佳化被使用了。
unique_subquery 在某些 IN 查詢中使用此種類型,而不是常規的 ref:value IN (SELECT primary_key FROM single_table WHERE some_expr)
index_subquery 在 某 些 IN 查 詢 中 使 用 此 種 類 型 , 與 unique_subquery 類似,但是查詢的是非唯一 性索引: value IN (SELECT key_column FROM single_table WHERE some_expr)
range 只檢索給定範圍的行,使用一個索引來選擇 行。key 列顯示使用了哪個索引。當使用=、 <>、>、>=、<、<=、IS NULL、<=>、BETWEEN 或者 IN 操作符,用常量比較關鍵字列時,可 以使用 range。
index 全表掃描,只是掃描表的時候按照索引次序 進行而不是行。主要優點就是避免了排序, 但是開銷仍然非常大。
all 最壞的情況,從頭到尾全表掃描。

possible_keys: 表示查詢時,可能使用的索引

key: 表示實際使用的索引

key_len: 索引欄位的長度

ref:顯示索引的哪一列被使用了,如果可能的話,是一個常數

rows: 掃描出的行數(估算的行數)

Extra: 執行情況的描述和說明

No tables :Query語句中使用FROM DUAL 或不含任何FROM子句

Using filesort :當Query中包含 ORDER BY 操作,而且無法利用索引完成排序,

Impossible WHERE noticed after reading const tables: MYSQL Query Optimizer

通過收集統計資訊不可能存在結果

Using temporary:某些操作必須使用暫存資料表,常見 GROUP BY ; ORDER BY

Using where:不用讀取表中所有資訊,僅通過索引就可以擷取所需資料;

 

注意:條件是一個範圍值(所謂 range),即 range 類型查詢欄位後面的索引無效。

     當order by 的欄位在  where 條件中出現 況且 欄位有固定值 或者 有固定返回時  會用到欄位的索引。

 慢查詢相關命令
mysql> show variables like ‘%slow%‘;+---------------------+---------------------------------------+| Variable_name       | Value                                 |+---------------------+---------------------------------------+| log_slow_queries    | OFF                                   || slow_launch_time    | 2                                     || slow_query_log      | OFF                                   || slow_query_log_file | D:\phpStudy\MySQL\data\Admin-slow.log |+---------------------+---------------------------------------+
mysql> show variables like ‘%long%‘;+---------------------------------------------------+-----------+| Variable_name                                     | Value     |+---------------------------------------------------+-----------+| long_query_time                                   | 10.000000 || max_long_data_size                                | 1048576   || performance_schema_events_waits_history_long_size | 10000     |+---------------------------------------------------+-----------+
mysql> show variables like ‘%min%‘;+--------------------------+-------+| Variable_name            | Value |+--------------------------+-------+| ft_min_word_len          | 4     || min_examined_row_limit   | 0     || query_cache_min_res_unit | 4096  |+--------------------------+-------+

 

mysql 慢查詢

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.