mysql 如何獲取SQL 語句的執行消耗時間
問題描述
問題解答
回答1:https://segmentfault.com/a/11... 看這篇文章 執行時間 mysql會自動返回啊
紅色不是執行時間嗎?下面是優化查詢的方案 你可以參考一下。4.查詢優化4.1.EXPLAIN在MySQL中可以使用EXPLAIN查看SQL執行計劃,用法:EXPLAIN SELECT * FROM tb_item 4.2.結果說明4.2.1.idSELECT識別符。這是SELECT查詢序列號。這個不重要。4.2.2.select_type表示SELECT語句的類型。
有以下幾種值:1、SIMPLE表示簡單查詢,其中不包含連接查詢和子查詢。2、PRIMARY表示主查詢,或者是最外面的查詢語句。
3、UNION表示連接查詢的第2個或后面的查詢語句。
4、DEPENDENT UNIONUNION中的第二個或后面的SELECT語句,取決于外面的查詢。5、UNION RESULT連接查詢的結果。6、SUBQUERY子查詢中的第1個SELECT語句。
7、DEPENDENT SUBQUERY子查詢中的第1個SELECT語句,取決于外面的查詢。8、DERIVEDSELECT(FROM 子句的子查詢)。4.2.3.table表示查詢的表。4.2.4.type(重要)表示表的連接類型。以下的連接類型的順序是從最佳類型到最差類型:
1、system表僅有一行,這是const類型的特列,平時不會出現,這個也可以忽略不計。2、const數據表最多只有一個匹配行,因為只匹配一行數據,所以很快,常用于PRIMARY KEY或者UNIQUE索引的查詢,可理解為const是最優化的。
3、eq_refmysql手冊是這樣說的:'對于每個來自于前面的表的行組合,從該表中讀取一行。這可能是最好的聯接類型,除了const類型。它用在一個索引的所有部分被聯接使用并且索引是UNIQUE或PRIMARY KEY'。eq_ref可以用于使用=比較帶索引的列。
4、ref查詢條件索引既不是UNIQUE也不是PRIMARY KEY的情況。ref可用于=或<或>操作符的帶索引的列。
5、ref_or_null該聯接類型如同ref,但是添加了MySQL可以專門搜索包含NULL值的行。在解決子查詢中經常使用該聯接類型的優化。
上面這五種情況都是很理想的索引使用情況。
6、index_merge該聯接類型表示使用了索引合并優化方法。在這種情況下,key列包含了使用的索引的清單,key_len包含了使用的索引的最長的關鍵元素。7、unique_subquery該類型替換了下面形式的IN子查詢的ref: value IN (SELECT primary_key FROM single_table WHERE some_expr) unique_subquery是一個索引查找函數,可以完全替換子查詢,效率更高。8、index_subquery該聯接類型類似于unique_subquery。可以替換IN子查詢,但只適合下列形式的子查詢中的非唯一索引: value IN (SELECT key_column FROM single_table WHERE some_expr)9、range只檢索給定范圍的行,使用一個索引來選擇行。
10、index該聯接類型與ALL相同,除了只有索引樹被掃描。這通常比ALL快,因為索引文件通常比數據文件小。11、ALL對于每個來自于先前的表的行組合,進行完整的表掃描。(性能最差)4.2.5.possible_keys指出MySQL能使用哪個索引在該表中找到行。如果該列為NULL,說明沒有使用索引,可以對該列創建索引來提高性能。4.2.6.key顯示MySQL實際決定使用的鍵(索引)。如果沒有選擇索引,鍵是NULL。
可以強制使用索引或者忽略索引:
4.2.7.key_len顯示MySQL決定使用的鍵長度。如果鍵是NULL,則長度為NULL。
注意:key_len是確定了MySQL將實際使用的索引長度。
4.2.8.ref顯示使用哪個列或常數與key一起從表中選擇行。4.2.9.rows顯示MySQL認為它執行查詢時必須檢查的行數。4.2.10.Extra該列包含MySQL解決查詢的詳細信息?Distinct:MySQL發現第1個匹配行后,停止為當前的行組合搜索更多的行。?Not exists:MySQL能夠對查詢進行LEFT JOIN優化,發現1個匹配LEFT JOIN標準的行后,不再為前面的的行組合在該表內檢查更多的行。?range checked for each record (index map: #):MySQL沒有發現好的可以使用的索引,但發現如果來自前面的表的列值已知,可能部分索引可以使用。?Using filesort:MySQL需要額外的一次傳遞,以找出如何按排序順序檢索行。?Using index:從只使用索引樹中的信息而不需要進一步搜索讀取實際的行來檢索表中的列信息。?Using temporary:為了解決查詢,MySQL需要創建一個臨時表來容納結果。?Using where:WHERE 子句用于限制哪一個行匹配下一個表或發送到客戶。?Using sort_union(...), Using union(...), Using intersect(...):這些函數說明如何為index_merge聯接類型合并索引掃描。?Using index for group-by:類似于訪問表的Using index方式,Using index for group-by表示MySQL發現了一個索引,可以用來查 詢GROUP BY或DISTINCT查詢的所有列,而不要額外搜索硬盤訪問實際的表。
相關文章:
1. dockerfile - 我用docker build的時候出現下邊問題 麻煩幫我看一下2. MySQL數據庫中文亂碼的原因3. angular.js - 關于$apply()4. dockerfile - [docker build image失敗- npm install]5. nignx - docker內nginx 80端口被占用6. angular.js - Ionic 集成crosswalk后生成的apk在android4.4.2上安裝失敗???7. angular.js使用$resource服務把數據存入mongodb的問題。8. css - C#與java開發Windows程序哪個好?9. 如何解決Centos下Docker服務啟動無響應,且輸入docker命令無響應?10. mysql - 新浪微博中的關注功能是如何設計表結構的?
