数据库八股文(2)
八股文--数据库篇_Menlleny-啊M的求生之路的博客-CSDN博客_数据库八股文https://blog.csdn.net/qq_39863093/article/details/116547017?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-6.n
『浅入浅出』MySQL 和 InnoDB - 面向信仰编程https://draveness.me/mysql-innodb/
B+树的优点和缺点?为什么不用hash存储?
优点:
1、请求设计的磁盘IO访问速度快(高度低、非叶子节点不带数据)。
2、查询效率稳定,都是O(logn)
3、叶子结点带指针,且排序,查询批量数据只需要知道收尾地址即可得到所有数据。
缺点:
1、平衡树增删效率不高,
2、存储比较大,要构造节点,存储一些结点与结点之间额外的信息。
(1、2都是树的通病)
为什么不用hash?
b+树的查找效率O(logn),而hash是O(1)
1、B+树更适合文件存储结构,不像哈希表,需要一次把数据都加入内存,b+树可以分层加载数据,减少内存使用。
2、B+树存储的数据都在叶子结点,并且叶子结点有指针相连,往往sql查询不只只有一个条件,多条件查询结果可以在叶子结点通过指针相连,效率比哈希表更快。
3、hash表不能范围查找。
count(*) 和count(1)和count(列名) 区别?
count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL
count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL
count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。
执行效率上:
列名为主键,count(列名)会比count(1)快
列名不为主键,count(1)会比count(列名)快
如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)
如果有主键,则 select count(主键)的执行效率是最优的
如果表只有一个字段,则 count(*)最优。
inner join 和where的区别?
多表查询时,where语句实际上是创造两张表的笛卡尔积的数据,例如有1000顾客和1000条销售记录,这个查询会先产生1000000个结果,然后通过正确的 ID过滤出1000条记录。inner join (等同于 join ,一样的)这样数据库就只产生等于ID 的1000条目标结果。增加了查询效率。
有些数据库系统会识别出 WHERE连接并自动转换为 INNER JOIN。
为什么不推荐使用select * ?
用“SELECT * ”数据库需要解析更多的对象、字段、权限、属性等相关内容,在 SQL语句复杂,硬解析较多的情况下,会对数据库造成沉重的负担
增大网络开销;有时会误带上如log、IconMD5之类的无用且大文本字段,数据传输size会几何增涨。如果DB和应用程序不在同一台机器,这种开销非常明显
即使 mysql 服务器和客户端是在同一台机器上,使用的协议还是 tcp,通信也是需要额外的时间。
使用select * ,不走索引,查询效率很慢。推荐使用带索引的查询。
MySQL表删除数据,索引文件会不会变小?
MySQL表删除数据,索引文件会不会变小?https://mp.weixin.qq.com/s/HiTL87MkbM2BVmfQE0Vm2A面试题:mysql 一棵 B+ 树能存多少条数据?
面试题:mysql 一棵 B+ 树能存多少条数据?https://mp.weixin.qq.com/s?__biz=Mzg2NzYyNjQzNg==&mid=2247485030&idx=1&sn=fae128c2991e69101e6e4732001bcb76&scene=21#wechat_redirect
更多推荐
所有评论(0)