Mysql面试题

一、什么是索引

索引是一种数据结构,能够帮助我们快速地检索数据库中的数据

二、索引有几种 区别是什么

常见的MySQL主要有两种结构:哈希索引和B+树索引

时间复杂度:哈希索引O(1)、B+树索引O(logN)

B+树是一个平衡的多叉树,从根节点到每个叶子节点的高度差值不超过1,而且同层级的节点间有指针相互链接,是有序的;哈希索引是采用一定的哈希算法,把键值换算成新的哈希值,检索时不需要类似B+树那样从根节点到叶子节点逐级查找,只需一次哈希算法即可,是无序的。

区别:哈希索引适合等值查询,但是无法进行范围查询;哈希索引没办法利用索引完成排序;哈希索引不支持多列联合索引的最左匹配规则;如果有大量重复键值的情况下,哈希索引的效率会很低,因为存在哈希碰撞问题。

三、索引失效

索引失效的7种情况

有or必全有索引
复合索引未用左列字段
like以%开头
需要类型转换
where中索引列有运算
where中索引列使用了函数
如果mysql觉得全表扫描更快时(数据少)

四、Mysql存储引擎有哪些 有什么区别 适用场景

Mysql常用引擎有InnoDB、MyISAM、MEMORY、MERGE,默认使用InnoDB。

区别以及适用场景:

MySQL引擎之间的区别和优劣之分

MyISAM不支持事务和行级锁,而且在崩溃后无法安全恢复;由于没有行锁机制,所以在海量写入的时候,会导致所有查询处于Locked状态

五、事务四个特性 四个隔离级别

事务四个特性以及四个隔离级别

六、分布式事务

分布式事务

七、SQL优化

SQL优化的几种方式

补充

1、开启查询缓存,优化查询

2、explain你的select查询,这可以帮你分析你的查询语句或是表结构的性能瓶颈。EXPLAIN 的查询结果还会告诉你你的索引主键被如何利用的,你的数据表是如何被搜索和排序的

3、当只要一行数据时使用limit 1,MySQL数据库引擎会在找到一条数据后停止搜索,而不是继续往后查少下一条符合记录的数据

4、为搜索字段建索引

5、使用 ENUM 而不是 VARCHAR。如果你有一个字段,比如“性别”,“国家”,“民族”,“状态”或“部门”,你知道这些字段的取值是有限而且固定的,那么,你应该使用 ENUM 而不是VARCHAR

6、Prepared Statements:Prepared Statements很像存储过程,是一种运行在后台的SQL语句集合,我们可以从使用prepared statements获得很多好处,无论是性能问题还是安全问题

Prepared Statements 可以检查一些你绑定好的变量,这样可以保护你的程序不会受到”SQL注入式“攻击

7、垂直分表

8、选择正确的存储引擎

八、Mysql日志

Mysql日志

九、行级锁的优点和缺点

优点

1、当在许多线程中访问不同的行时只存在少量锁定冲突

2、回滚时只有少量的更改

3、可以长时间锁定单一的行

缺点:

1、比页级或表级锁定占用更多的内存

2、当在表的大部分中使用时,比页级或表级锁定速度慢,因为你必须获取更多的锁

3、如果你在大部分数据上经常进行GROUP BY操作或者必须经常扫描整个表,比其它锁定明显慢很多

4、用高级别锁定,通过支持不同的类型锁定,你也可以很容易地调节应用程序,因为其锁成本小于行级锁定

十、分库分表原理 读写分离原理

数据库分库分表、读写分离的实现原理及使用场景

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

z.haoui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值