数据库八股文(2)

 『浅入浅出』MySQL 和 InnoDB - 面向信仰编程icon-default.png?t=L9C2https://draveness.me/mysql-innodb/

八股文--数据库篇_Menlleny-啊M的求生之路的博客-CSDN博客_数据库八股文https://blog.csdn.net/qq_39863093/article/details/116547017?utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-6.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~default-6.no_search_link

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表删除数据,索引文件会不会变小?icon-default.png?t=L9C2https://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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值