mysql数据库基础知识(面试题)

本文探讨了InnoDB与MyISAM索引的主要区别,包括聚簇与非聚簇、数据存储位置,以及权限表如user、db、table_priv等的作用。还深入讲解了InnoDB引擎的特性,如插入缓冲、预读等,以及如何选择存储引擎。此外,介绍了索引原理、前缀索引、最左前缀原则和B+树与Hash索引的对比。
摘要由CSDN通过智能技术生成

五.Mysql数据库:

5.1MyISAM索引与InnoDB索引的区别

  • InnoDB索引是聚簇索引,MyISAM索引是非聚簇索引
  • InnoDB的主键索引的叶子节点存储着行数据,因此主键索引非常高效
  • MyISAM索引的叶子节点存储的是行数据地址,需要在寻址一次才能的到数据
  • InnoDB非主键索引的叶子节点存储的是主键和其他索引的列数据,因此查询时做到覆盖索引会非常高效

5.2mysql有关权限的表都有哪几个

user权限表:记录连接到服务器的用户账号信息,里面的权限是全局级的

db权限表:记录各个账号在数据库上的权限操作

table_priv权限表:记录数据库表级的操作权限

columns_priv权限表:记录数据列级的操作权限

host权限表:配合db权限表对给定主机上数据库级操作权限作更细致的控制,这个权限表不受crant和revoke语句影响

5.3 InnoDB引擎的四大特性

插入缓冲

二次写

自适应哈希索引

预读

5.3 存储引擎的选择

如果没有特别的需求,使用默认的Innodb即可

MyISAM:以读写插入为主的应用程序,比如博客系统,新闻门户网站

Innodb:更新(删除)操作频率也高,或者要保证数据的完整性;并发量高,支持事务和外键,比如OA自动化办公系统

5.4 索引的基本原理

1.把创建了索引的列的内容进行排序

2.把排序结果生成倒排表

3.在倒排表内容上拼上数据地址链

4.在查询的时候,先拿到倒排表内容,再取出数据地址链,从而拿到具体数据

5.5 前缀索引

语法:index(field(10)),使用字段值的前10个字符建立索引,默认是使用字段的全部内容建立索引

前提:前缀的标识度高。比如密码就适合建立前缀索引,因为密码几乎各不相同

实操的难度:在于前缀截取的长度

5.6 什么是最左前缀原则?什么是最左匹配原则

顾名思义,就是最左的优先,再创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边

最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>,<,between,like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。

=和in是可以乱序的,比如a = 1 and b = 2 and c = 3建立索引(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以标识的形式

5.7 B树和B+树的区别

在B树中,你可以将键和值存放在内部节点和叶子节点;

但在B+树种,内部节点都是键,没有值,叶子节点同时存放键和值

B+树的叶子节点有一条链相连,而B树的叶子节点各自独立

5.7.1使用B树的好处

B树可以在内部节点同时存储键和值,因此,把频繁访问的数据放在靠近根节点的地方将会大大提高热点数据的查询效率,这种特性使得B树在特定数据重复查询多次的场景中更加高效

5.7.2 使用B+树的好处

使用B+树的内部节点只存放键,不存放值,因此,一次读取,可以在内存页中获取更多的键,有利于更快的缩小查找范围,B+树的叶节点由一条链相连,因此,当需要进行一次全数据遍历的时候,B+树只需要使用O(logN)时间找到最小的节点,然后通过链O(N)的的顺序遍历即可,而B树则需要对树的每一层进行遍历,这回需要更多的内存置换次数,因此页需要花费更多的时间

5.8 Hash索引和B+树索引有什么区别

hash索引的底层是hash表,进行查找时,调用一次hash函数就可以获取到响应的键值,之后进行回表查询获得实际数据

B+树底层实现时多路平衡查找树,对于每一次的查询都是从根节点出发,查找到叶子节点方可以活获得所查键值

区别:

  • hash索引进行等值查询更快,但是却无法进行范围查询
  • hash索引不支持使用索引进行排序
  • hash索引不支持模糊查询以及多列索引的最左匹配原则
  • hash索引任何时候都避免不了回表查询数据,而B+树在符合某些条件的时候可以只通过索引完成查询
  • hash索引索然在等值查询上较快,但是不稳定,性能不可预测。当某个键值存在大量重复的时候,发生hash碰撞,此时效率可能极差,而B+树的查询效率比较稳定,对于所有的查询都是从根节点到叶子节点,且树的高度较低

5.9 联合索引是什么?为什么需要注意联合索引中的顺序?

mysql可以使用多个字段同时建立一个索引,叫做联合索引。在联合索引中,如果想要命中索引,需要按照建立索引时的字段顺序挨个使用,否则无法命中索引

具体原因是因为:

​ mysql使用索引时需要索引有序,假设现在建立了”name,age,school“的联合索引,那么索引的排序为:先按照name排序,如果name相同,则按照age排序,如果age的值也相等,则按照school进行排序

​ 当进行查询时,此时索引仅仅按照name严格有序,因此必须首先使用name字段进行等值查询,之后对于匹配到的列而言,其按照age字段严格有序,此时可以使用age字段用索引查找,以此类推。因此在建立联合索引的时候应该注意索引列的顺序,一般情况下,将查询需求频繁或者字段选择性高的列放在前面,因此可以根据特例的查询或者表结构进行单独的调整

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值