91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL explain中的rows是如何計算的

發布時間:2021-09-16 07:24:49 來源:億速云 閱讀:207 作者:chen 欄目:大數據

這篇文章主要講解了“MySQL explain中的rows是如何計算的”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“MySQL explain中的rows是如何計算的”吧!

【背景鋪墊】

相關表:

CREATE TABLE test_table (  id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,  name varchar(32) NOT NULL,  PRIMARY KEY (id)) ENGINE = InnoDB CHARSET = utf8mb4;

test_table 表記錄數約12w+

問題描述

相關SQL:


EXPLAIN SELECT COUNT(*)

FROM test_table

WHERE id >= 10534

AND id <= 15375;

MySQL explain中的rows是如何計算的

疑問1:上述SQL理應按id主鍵(聚簇索引)范圍查找,為啥explain里的rows會多余兩者之差呢?

在SQL結尾處增加 LIMIT 10 后,rows數值竟然沒有任何影響(覺得可能會變為: 10)。

EXPLAIN SELECT COUNT(*)

FROM test_table

WHERE id >= 10000

LIMIT 10;

MySQL explain中的rows是如何計算的

疑問2:LIMIT值不會影響rows的值么?

rows究竟是怎么計算的呢?

這個rows在官網文檔中的解釋如下:

“    

rows (JSON name: rows)

The rows column indicates the number of rows MySQL believes it must examine to execute the query.


For [InnoDB] tables, this number is an estimate, and may not always be exact.

http://dev.mysql.com/doc/refman/5.7/en/explain-output.html#explain_rows

簡單理解即:這個rows就是mysql認為估計需要檢測的行數。

為了探究rows究竟是如何算出來的,查找MYSQL源碼來看看:

文件1:sql/opt_explain_traditional.cc   關鍵部分:push(&items, column_buffer.col_rows, nil)文件2:sql/opt_explain.cc   關鍵部分:select->quick->records文件3:sql/opt_range.cc   關鍵部分:check_quick_select

而check_quick_select的功能,在MySQL源碼中的注釋為:

“    
Calculate estimate of number records that will be retrieved by a range scan on given index using given SEL_ARG intervals tree.    

簡單翻譯就是:這個方法僅僅根據給出的關于這個索引的條件和索引本身,來判斷需要掃描多少行。

總結

MySQL Explain 里的 rows 這個值
  • 是MySQL認為它要檢查的行數(僅做參考),而不是結果集里的行數;
  • 同時 SQL里的 LIMIT 和這個也是沒有直接關系的。
另外,很多優化手段,例如關聯緩沖區和查詢緩存,都無法影響到rows的顯示。  MySQL可能不必真的讀所有它估計到的行,它也不知道任何關于操作系統或硬件緩存的信息。


感謝各位的閱讀,以上就是“MySQL explain中的rows是如何計算的”的內容了,經過本文的學習后,相信大家對MySQL explain中的rows是如何計算的這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

龙泉市| 胶州市| 芜湖市| 永胜县| 海安县| 玉林市| 永兴县| 宿迁市| 安康市| 金沙县| 乐平市| 长治县| 得荣县| 盖州市| 萨迦县| 蛟河市| 茌平县| 涞水县| 会昌县| 桂阳县| 璧山县| 鄂托克旗| 永登县| 昌图县| 海宁市| 柘城县| 宣汉县| 呈贡县| 盐亭县| 宁德市| 海林市| 读书| 喀什市| 陆河县| 金山区| 达日县| 石城县| 黄大仙区| 孝感市| 武邑县| 竹溪县|