mysql 索引 lt =_MySQL索引相关
MySQL索引采用的是B+TREE,多列聯(lián)合索引是一個(gè)有序元組,其中各個(gè)元素均為數(shù)據(jù)表的一列。設(shè)一個(gè)表有M列,建一個(gè)度為n的多列聯(lián)合索引,深度h = lognM,設(shè)一組索引列的大小為s,索引文件的大小可以計(jì)算為s*M*(1+M/n+M/n2+M/n3+。。。。)
SQLServer索引可以include非索引列,include的最大好處是這些列只需要在葉子節(jié)點(diǎn)存在,索引可以有效減小索引文件的大小,同時(shí)一個(gè)頁(yè)面上可以存儲(chǔ)更多的內(nèi)節(jié)點(diǎn),提高減少磁盤(pán)IO。
MySQL等數(shù)據(jù)庫(kù)的索引為什么使用B+TREE而不是B-TREE,一種說(shuō)法是由于B+Tree內(nèi)節(jié)點(diǎn)去掉了data域,因此可以擁有更大的出度,擁有更好的性能。也就是說(shuō),B+Tree內(nèi)節(jié)點(diǎn)去掉了data域,內(nèi)節(jié)點(diǎn)占用更少的空間,一個(gè)頁(yè)內(nèi)可以放更多的葉子節(jié)點(diǎn),因此可以擁有更大的出度。并列出出度的公式:
dmax = floor(pagesize / (keysize + datasize + pointsize))?? (pagesize – dmax >= pointsize)
或
dmax = floor(pagesize / (keysize + datasize + pointsize)) – 1?? (pagesize – dmax < pointsize)
這種解釋感覺(jué)起來(lái)有點(diǎn)勉強(qiáng),公式也覺(jué)得奇怪,出度和pagesize有什么關(guān)系呢?出度應(yīng)該會(huì)有更多的考慮吧,一個(gè)1w行表的索引和100000w行表索引的出度不能設(shè)成一樣吧,比如都是1000,那1w行表用索引的意義就不大了。索引又不會(huì)放到一個(gè)page上。我覺(jué)得正確的解釋是這樣:由于B+Tree內(nèi)節(jié)點(diǎn)去掉了data域,這樣一個(gè)頁(yè)上可以存儲(chǔ)更多的內(nèi)節(jié)點(diǎn),也就有可能存儲(chǔ)多個(gè)層級(jí)的內(nèi)節(jié)點(diǎn)(比如前3層),這樣前3次索引查詢(xún)只需要一次磁盤(pán)IO,和SQLServer索引可以include非索引列原理類(lèi)似,只不過(guò)SQLServer做得更好罷了。
總結(jié)
以上是生活随笔為你收集整理的mysql 索引 lt =_MySQL索引相关的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 连续反应matlab,MATLAB和Mo
- 下一篇: OPPO ColorOS升级:20个应用