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