久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mysql中聚簇索引的頁分裂原理是什么

160次閱讀
沒有評論

共計 1404 個字符,預計需要花費 4 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

這篇文章給大家介紹 mysql 中聚簇索引的頁分裂原理是什么,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

聚簇結構的特點:

根據(jù)主鍵查詢條目時, 不用回行 (數(shù)據(jù)就在主鍵節(jié)點下)

如果碰到不規(guī)則數(shù)據(jù)插入時, 造成頻繁的頁分裂

為什么會產(chǎn)生頁分裂?

這是因為聚簇索引采用的是平衡二叉樹算法,而且每個節(jié)點都保存了該主鍵所對應行的數(shù)據(jù),假設插入數(shù)據(jù)的主鍵是自增長的,那么根據(jù)二叉樹算法會很快的把該數(shù)據(jù)添加到某個節(jié)點下,而其他的節(jié)點不用動;但是如果插入的是不規(guī)則的數(shù)據(jù),那么每次插入都會改變二叉樹之前的數(shù)據(jù)狀態(tài)。從而導致了頁分裂。

測試:

創(chuàng)建 2 張表

create table t8(
id int primary key,
c1 varchar(500),
c2 varchar(500),
c3 varchar(500),
c4 varchar(500),
c5 varchar(500),
c6 varchar(500)
) engine innodb charset utf8;
create table t9(
id int primary key,
c1 varchar(500),
c2 varchar(500),
c3 varchar(500),
c4 varchar(500),
c5 varchar(500),
c6 varchar(500)
) engine innodb charset utf8;

寫一個 php 腳本,用于插入 1W 條無規(guī)則的主鍵數(shù)據(jù)和 1W 條規(guī)則的主鍵數(shù)據(jù),來看看區(qū)別。

?php
set_time_limit(0);
$conn = mysql_connect( localhost , root , 1234 
mysql_query( use test; 
// 自增長主鍵
$str = str_repeat(a , 500);
$startTime = microtime(true);
for($i=1;$i =10000;$i++){ mysql_query( insert into t8 values($i, $str , $str , $str , $str , $str , $str) 
$endTime = microtime(true);
echo $endTime-$startTime. br/ 
// 無序的主鍵
$arr = range(1, 10000);
shuffle($arr);
$startTime = microtime(true);
foreach($arr as $i){ mysql_query( insert into t9 values($i, $str , $str , $str , $str , $str , $str) 
$endTime = microtime(true);
echo $endTime-$startTime. br/

測試結果圖

mysql 中聚簇索引的頁分裂原理是什么

1W 條規(guī)則的數(shù)據(jù):998 秒 = 16 分鐘
1W 條不規(guī)則的數(shù)據(jù):1939 秒 = 32 分鐘

結論:

聚簇索引的主鍵值, 應盡量是連續(xù)增長的值, 而不是要是隨機值, (不要用隨機字符串或 UUID),否則會造成大量的頁分裂與頁移動。在使用 InnoDB 的時候最好定義成:

id int unsigned primary key auto_increment

關于 mysql 中聚簇索引的頁分裂原理是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向 AI 問一下細節(jié)

正文完
 
丸趣
版權聲明:本站原創(chuàng)文章,由 丸趣 2023-12-04發(fā)表,共計1404字。
轉(zhuǎn)載說明:除特殊說明外本站除技術相關以外文章皆由網(wǎng)絡搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 巴中市| 平江县| 广平县| 阿拉善左旗| 屏东市| 阿图什市| 泰来县| 乌兰察布市| 长海县| 库车县| 浏阳市| 杭锦旗| 泰宁县| 衡阳县| 湘西| 遂宁市| 青河县| 库伦旗| 怀远县| 洪湖市| 中江县| 石柱| 洛浦县| 疏附县| 赫章县| 师宗县| 兴海县| 汉源县| 耒阳市| 巴彦县| 尚义县| 阿瓦提县| 张家川| 孙吴县| 石景山区| 清丰县| 治多县| 罗源县| 昌都县| 新源县| 赞皇县|