標籤: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 慢查詢