目录
21. 简单描述下MySQL中,索引,主键索引,唯一索引,联合索引的区别,对数据库有什么影响(读写方面)
1. DDL,DML,DCL的区别?
- DDL:数据定义语言: 一般用来堆数据库表进行结构调整,例如: Create, Drop, Alter
- DML:数据操作语言: 对数据进行增删改查操作,Insert,Delete,Update,Select
- DCL:数据控制语言: grant, commit, rollback
2. ACID是什么?事务是什么?
A(Atomictiy ): 原子性, 事务要么被全部执行,要么全不执行
C(Consistency): 一致性, 事务执行使得数据库从一种正确状态转换到另一种正确状态
I(ISolation): 隔离性, 在事务正确提交前, 不允许把该事务对数据的改变提供给其他事物
D(Durability): 持久性, 事务正确提交后,永久保存在数据库, 即使事务提交后有其他故障, 事务处理结果也会保存.
可以这么理解事务: 事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组 如果任何一个语句操作失败,那么整个操作被失败,以后操作就会有回滚到操作前的状态,或者上一节点. 为了确保要么执行,要么不执行,可以使用事务. 要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性,持久性.
事务: 事务是作为一个单元的一组有序的数据库操作,组中所有的数据成功,则事务操作成功,组中有一个失败,则事务不成功. 所有操作完成,则事务提交,其修改将作用于所有其他数据库进程. 如果一个操作失败, 则事务回滚, 该事务的所有操作将被取消.
3. InnoDB和MyISAM的区别

MySQL默认InnoDB存储引擎,它的事务隔离级别为可重复读,适合比较庞大的应用场景.
4. 索引有哪些类型?
- 数据结构角度
- 树索引
- Hash索引
- 物理存储角度
- 聚集索引
- 非聚集索引
- 逻辑角度
- 普通索引
- 唯一索引
- 主键索引
- 联合索引
5. 为什么InnoDB存储引擎选用B+树而不是B树?
- B+树是基于B树和叶子节点顺序访问指针进行的,它具有B树的平衡性,并且通过顺序访问指针来提高区间查询的性能.
- 在B+树中,一个节点中的key从左到右非递减排列,如果某个指针的左右相邻key分别是key i和key i+1,并且不为null,则该指针指向节点的所有key大于等于key i 且小于等于key i+1.
- 进行查找操作时,首先在根节点进行二分查找,找到一个key所在的指针,然后递归地在指针所指向的节点进行查找.直到查到叶子节点,然后在叶子节点上进行二分查找,找出key所对应的data.
- 总结:用B+树不用B树考虑的是IO对性能的影响,B树的每个节点都会存储数据,而B+树只有叶子节点才存储数据,所以查找相同的数据量的情况下,B树的高度就会更高,IO更加频繁,数据库索引是存储在磁盘上的,当数据量大时,就不能把整个索引全部加载到内存了,只能逐一加载每一个磁盘页(对应索引树的节点)
6. 什么情况索引会失效?
- 索引列参与表达式计算: select 'sname' from 'stu' where 'age'+10 = 50;
- 函数运算: select 'sname' from 'stu' where left('date',4) > 2000;
- %在前的 模糊查询: select 'sname' from 'stu' where 'sname' like '%张'; -- 不走索引
- 字符串与数字比较: select * from 'stu' where 'phone' = 1888 --不走索引
- 查询条件中有or,即使其中有条件字段带索引也不会走索引,除非所有条件字段都带索引:
- 正则表达式不走索引
- MySQL优化器不使用索引
7. MySQL排查问题的手段有哪些?
- 使用Explain 查询SQL执行计划
- 开启慢查询日志,查看慢查询的SQL
- 使用show processlist 查看当前所有的连接信息
8. MySQL性能优化方式?
- 服务器优化(更换高性能cpu,内存,网络,磁盘等硬件)
- 表设计的优化: 字段长度控制.增加必要的索引
- SQL优化: 避免SQL不命中索引的情况
- 架构部署优化: 一主多从集群的方式部署
- 编码优化实现读写分离
9. SQL内连接和外连接的区别?
- 内连接: inner join 或 join 利用了where子句对多表连接形成的笛卡尔积进行筛选,说白了内连接就是获取两个表之间的公共部分
- 左外连接: 获取左表的内容使用左外
- 右外连接: 获取右表的内容使用右外
10. MySQL有哪些搜索引擎?
- InnoDB: 它是一个事务安全的存储引擎,它具备提交,回滚以及崩溃恢复的功能用于保护用户数据,InnoDB的行级锁定以及Oracle风格的一致性无锁读提升了它的多用户并发数及性能.InnoDB将用户数据存储在聚集索引以减少查询带来的IO开销,为了保证数据的完整性,InnoDB还支持外键约束
- MyISAM:它既不支持事务也不支持外键,优点是访问速度快,但是表级别的锁定限制了它在读写负载方面的性能,因此它经常用于只读或者以读为

文章详细介绍了MySQL中的核心概念,包括DDL、DML、DCL的区别,ACID事务特性,InnoDB与MyISAM存储引擎的差异,各种类型的索引,以及索引优化策略。此外,还讨论了事务隔离级别,数据恢复方法,以及数据库设计规范。文章强调了性能优化,如使用索引和事务处理对数据库读写性能的影响。
最低0.47元/天 解锁文章
863

被折叠的 条评论
为什么被折叠?



