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+树要低,空间使用率更高