mysql大表查询

大表查询?

第一个反应就是建索引,但是显然,这不是面试官想要的答案。

或许面试官会继续问,索引?有哪些索引(B树和B+树的问题)

建议就是把大表分成多个表。

面试官肯定会追问,怎么分?

横向拆分(记录的拆分)和纵向拆分(字段的拆分)

 

横向拆分

例如把大表的时间段,分开来,2021的和2020的分开。

 

纵向拆分

就是把大段文字的拆走。例如简介,这些可以分到其他表格,需要的时候再通过主键查回来。

 

回到刚才的B树和B+树问题。

参考 https://blog.csdn.net/u013411246/article/details/81088914

mysql的索引,无论是innodb(3.5后默认)还是???都是B+树。

 

B树,查询会慢O(n)

1.关键字集合分布在整颗树中;所有叶子结点位于同一层(这个相对于二叉树来说,是个进步)

2.任何一个关键字出现且只出现在一个结点中;

3.搜索有可能在非叶子结点结束;

4.其搜索性能等价于在关键字全集内做一次二分查找;

 

 

###################################################################################

B+树,查询会慢O(logn)

为所有叶子结点增加一个链指针;

所有关键字都在叶子结点出现(不可能在非叶子结点命中)

更适合文件索引系统

 

 

 ###################################################################################

B*树

这个是在B+树上变异过来。

是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针

B*树分配新结点的概率比B+树要低,空间使用率更高

 

posted @ 2021-08-17 21:17  Ghose  阅读(426)  评论(0)    收藏  举报