亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

垣曲县| 柏乡县| 新晃| 莱芜市| 淮南市| 阜城县| 玉屏| 招远市| 龙游县| 大厂| 沙洋县| 平阳县| 临武县| 白玉县| 乌恰县| 沙河市| 安国市| 晋中市| 林甸县| 行唐县| 新竹市| 南投市| 白朗县| 长寿区| 巨野县| 芮城县| 呼图壁县| 日土县| 宣城市| 太谷县| 临潭县| 仁化县| 宽甸| 韶山市| 志丹县| 黑龙江省| 大厂| 辉南县| 荆州市| 福泉市| 于田县|