Back

mysql面试题

MySQL InnoDB、Mysaim的特点

  • InnoDB
    1. 支持事务处理、外键、行锁
    2. 不保存表的具体行数,扫描表来计算多少行
    3. 对于AUTO_INCREMENT类型的字段,必须包含只有该字段的索引
    4. DELETE表时,是一行一行的删除
    5. 把数据和索引存放在表空间里面
    6. 跨平台直接拷贝使用
    7. 表格很难被压缩
  • Mysaim (适合读多写少的场景)
    1. 不支持事务、外键
    2. 保存表具体行数
    3. AUTO_INCREMENT可以与其他字段一起建联合索引
    4. DELETE表时先drop表,然后重建
    5. 表将存放三个文件。frm文件存在表格定义,myds数据文件,myi存在索引
    6. 跨平台很难卡片被
    7. 表格可压缩

Mysql主备同步的基本原理

  1. master将该表记录到二进制日志 binary log中
  2. salve将master的binary log events 拷贝到它的中继日志relay log
  3. salve重做中继日志中的事件,改变数据

如何优化数据库性能(索引、分库分表、批置操作、分页算法、升级硬盘SSD、业务优化、主从部署)

  1. 选择合适的数据库引擎,合理使用索引
  2. 分页获取数据,按需取字段
  3. 优化业务代码,减少数据库IO
  4. 分库分表
  5. 部署主从数据库
  6. 升级硬件

SQL什么情况下不会使用索引(不包含,不等于,函数)

  1. select * 可能导致不走索引
  2. 空值会导致不走索引
  3. 索引列有函数运算
  4. 隐式转换可能导致不走索引
  5. 表的数据库小或者需要选择大部分数据,不走索引
  6. != 或者 <>
  7. like ‘%ex’
  8. not in 、 not exist

一般在什么字段上建索引(过滤数据最多的字段)

  1. 表的主键、外键
  2. 数据量超过300的表
  3. 经常与其他表进行连接的表的连接字段
  4. 经常出现在where语句上的字段
  5. 应该建在选择性高的字段、小字段

mysql调优

  1. explain select 语句
  2. 当只要一条数据时使用limit 1
  3. 为查询字段建索引
  4. 避免select *
  5. 字段尽量使用not null
  6. 垂直分割
  7. 拆分大的delete和insert,这俩会锁表
  8. 分库分表分区
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus