关系型数据库优化面试题
那些因素可能会造成数据库性能问题?
-
高并发
-
海量数据的高效查询
-
硬件性能差
-
SQL不合理
-
需求不合理
-
表的设计合理
-
存储引擎不合理
MySQL的执行流程是怎样的?
MySQL的执行主要分为两层即使service层和数据存储层
在service层主要有连接器、分析器、优化器;在数据存储层主要是数据库的存储引擎
具体流程是:连接器验证客户端传递的账户密码,登录到数据库,查询用户的权限信息,然后建立链接,然后执行查询语句,在8.0以前会先从缓存中查询当前SQL的结果是否存在,如果存在直接返回,如果不存在就使用分析器,分析SQL的关键字(字段,查询条件等),在使用优化器优化执行方案,当选择了执行方案之后,就校验是否有权限,权限通过就执行方案,调佣存储引擎的接口,返回执行的结果
优化MySQL你是怎么样的流程?
- 定位问题,查询慢SQL
- 方式一:开启慢SQL的日志,配置慢SQL的时间、输出位置
- 方式二:查询MySQL的基本配置,最大连接数
- 使用Explain命令分析SQL慢的原因
- 是否使用索引
- 优化
- 选择合适的存储引擎
- 使用冗余手段
- 遵循三范式
- 增量查询
如何定位慢SQL?
- 使用mysql的命令开启慢sql日志
- 使用Druid的监控
你如何看SQL有没有命中索引?
使用explain命令
Mysql存储引擎有哪些,有什么区别,如何选择 ?
常见的有三种:InnoDB、MyISAM、Memory
InnoDB:支持事务管理,支持行锁、支持外键
MyISAM:查询和添加速度相对快、支持表锁、支持全文检索
当我们的事务要求不高,同时以查询和添加为主的就考虑使用MySIAM:比如论坛中的发帖,回复
INNODB存储引擎: 对事务要求高,保存的数据都是重要数据,我们建议使用INNODB,比如订单表,账号表.
Memory 存储:比如我们数据变化频繁,不需要入库,同时又频繁的查询和修改,我们考虑使用memory, 速度极快.
如果一张表的数据量很大,我需要统计金额求和,如何优化?
首先考虑是否必须保证是强一致性,使用冗余手段,根据年,日分表,或者单独分一个表来累加数据
什么是索引?
一种提高检索效率的分散数据结构
MySQL索引有 哪些类型?
普通索引:(Normal)允许重复的值出现,可以在任意字段上面添加
主键索引:数据库默认创建,不可以为null
唯一索引:不能使用重复的记录 可以为null
全文索引:对文本于进行索引,只有MyISAM支持,支持英文
MySQL的InnoDB引擎的索引原理?为什么使用B+树?
MySQL的InnoDB的索物理结构是使用两个文件一个表的结构文件.frm 一个是数据索引文件.ibdata;逻辑结构使用的B+树,
使用B+树查询效率稳定,方便排序,和范围查询,树高较低所以IO低
InnoDB的索引结构和MyISAM的索引结构有什么区别?
他们的主键索引有区别:在InnoDB中叶子节点存储的是数据 和MyISAM的叶子节点存储的是磁盘地址
他们的辅助索引的区别:InnoDB中叶子节点存储的是主键索引的key值,而MyISAM的叶子节点存储的是磁盘地址
那些列不适合创建索引?
经常修改的,离散度较小的,不经常查询的
哪些因素会造成索引失效?
使用is null
使用or 连接
字符类型没打引号
like语句左边有通配符
辅助索引的原理
在InnoDB的辅助索引中,他的叶子节点是存的主键索引的key值,所以他需要回表左两次索引查询,
组合索引的匹配规则
使用的是向左匹配原则