溫馨提示×

溫馨提示×

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

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

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

發(fā)布時(shí)間:2021-06-16 17:19:33 來源:億速云 閱讀:406 作者:Leah 欄目:MySQL數(shù)據(jù)庫

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

聚簇結(jié)構(gòu)的特點(diǎn):

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

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

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

這是因?yàn)榫鄞厮饕捎玫氖瞧胶舛鏄渌惴?,而且每個(gè)節(jié)點(diǎn)都保存了該主鍵所對應(yīng)行的數(shù)據(jù),假設(shè)插入數(shù)據(jù)的主鍵是自增長的,那么根據(jù)二叉樹算法會很快的把該數(shù)據(jù)添加到某個(gè)節(jié)點(diǎn)下,而其他的節(jié)點(diǎn)不用動;但是如果插入的是不規(guī)則的數(shù)據(jù),那么每次插入都會改變二叉樹之前的數(shù)據(jù)狀態(tài)。從而導(dǎo)致了頁分裂。

測試:

創(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;

寫一個(gè)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/>';

測試結(jié)果圖

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

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

結(jié)論:

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

id int unsigned primary key auto_increment

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

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI