3.数据库部分面试题

本文详细介绍了如何在开发和运维阶段定位慢查询,包括设置日志、explain命令分析、索引概念(如InnoDB、B+树、聚簇索引、非聚簇索引等)、索引创建原则、避免索引失效技巧,以及事物特性、并发问题、主从复制和分库分表等数据库优化方法。
摘要由CSDN通过智能技术生成
1.如何定位慢查询

1.开发阶段:可以开启慢查询日志,设置在多长时间内没有执行完的sql语句记录到日志里面。

2.运维和测试阶段有专门的工具;

2.sql语句分析

1.利用explain命令来对sql语句分析;

3.索引概念以及底层数据结构

1.存储引擎:存储引擎是基于表的;是存储数据,建立索引,更新/查询数据等技术的实现方式;

2.mysql5之后的存储引擎是InnoDB,支持事物,外键,表锁/行锁;

3.索引:帮助mysql高效获取数据的一种数据结构;在数据之外,数据库系统还维护着特定查找算法的数据结构;

4.B+数是B树的一种优化

(1)阶数更多,路径更短,查找更快;

(2)磁盘读写代价更低。因为B+树的叶子节点存储数据,非叶子节点存储指针;

(3)叶子节点是一个双向链表,B+树更便于扫库和区间查询;

4.聚簇索引和非聚簇索引以及回表查询

(1)聚集索引:数据和索引放到一起,索引的叶子节点保存了行数据。必须有且只有一个。

(2)非聚簇索引:数据和索引分开存储索引叶子节点关联的是对应主键;可以有多个。

(3)回表查询:在非聚簇索引中找到对应的主键值,再到聚集索引中查找这行数据。

Tip:聚簇索引的选取规则:主键 > 唯一索引 > rowid

5.覆盖索引,超大分页优化

覆盖索引:查询使用了索引,并且需要返回的列在该索引中全部能够找到。

超大分页优化:我的思路,通过覆盖索引加子查询的形式优化。

select * from tb_fund t

(select id from tb_fund order by id limit 90000000,10) a

where t.id=a.id;
6.索引创建原则

(1)常见索引:主键索引,唯一索引,复合索引;

(2)索引创建原则:

数据量大,且查询比较频繁的表;

作为查询条件,排序,分组的字段;

7.索引失效的情况

(1)违反最左前缀法则 范围查询右边的列,不能使用索引;

(2)不要在索引列上进行运算操作, 索引将失效

(3)字符串不加单引号,造成索引失效。(

(4)类型转换 以%开头的Like模糊查询,索引失效

8.sql优化经验

表的设计优化,数据类型的选择

索引优化,索引创建原则

sql语句优化,避免索引失效,避免使用select *  ….

主从复制、读写分离,不让数据的写入,影响读操作

分库分表

9.事物特性

原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。

隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。

10.并发产生的事物问题,事物隔离级别

11.undo log和redo log的区别

redo log: 记录的是数据页的物理变化,服务宕机可用来同步数据

undo log :记录的是逻辑日志,当事务回滚时,通过逆操作恢复原来的数据

redo log保证了事务的持久性,undo log保证了事务的原子性和一致性

12.解释一下MVCC

13.Mysql主从同步原理

MySQL主从复制的核心就是二进制日志binlog(DDL(数据定义语言)语句和 DML(数据操纵语言)语句) 主库在事务提交时,会把数据变更记录在二进制日志文件 Binlog 中从库读取主库的二进制日志文件 Binlog ,写入到从库的中继日志 Relay Log 。 从库重做中继日志中的事件,将改变反映它自己的数据

14.Mysql分库分表
前提:

1,项目业务数据逐渐增多,或业务发展比较迅速

2,优化已解决不了性能问题(主从读写分离、查询索引…)

3,IO瓶颈(磁盘IO、网络IO)、CPU瓶颈(聚合查询、连接数太多)

目的:

分担访问和存储压力

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值