1、数据库三大范式
    第一范式:列不可分割
    第二范式:数据最好使用主键索引来保证唯一性
    第三范式:如果可以通过其他表推导出来的数据,那么表中不要创建冗余列。
    2、Binlog的记录方式
    使用statement进行记录,记录每次修改操作语句
    使用row记录,更加详细,记录操作的哪行数据,还有修改的值,日志量记录很大
    两种折中,先使用statement,保存不了在使用row
    3、MyISAM和Innodb的区别
    MyIsam不支持事务,还有行级锁和外键
    Innodb支持事务,行级锁,外键
    4、MyISAM和Innodb的索引区别
    1、Innodb是聚簇索引,叶子节点存储的是行数据。所以查询很高效
    2、MyISAM是非聚簇索引,叶子节点存储的是行数据地址,需要在查询一次。
    5、索引的优缺点
    优点:提高查询速度
    缺点:占用空间,并且进行了增删之后需要对索引进行维护
    6、索引使用场景
    where 之后字段。更加快速的判断
    orderBy之后字段。索引自带排序,更加快速
    join on 之后等值条件判断
    7、索引的类型
    主键索引:唯一不重复,不为null
    唯一索引:唯一不重复
    普通索引:
    全文索引:
    8、索引实现
    B+树实现。基于自平衡二叉树,叶子节点存储行数据,二分快速查询数据
    哈希索引。基于哈希表存储,hashcode,找单行数据更快
    9、索引基本原理
    就是把无序的数据变成有序的查询
    建立了索引的列进行排序,之后生成倒排表,在拼上数据链接地址。
    10、索引设计原则
    设计到where或者on后面的字段,常用来做查询条件的字段
    使用短索引,长字符串可以规定前几位。节省空间。不要过度创建。
    11、创建索引的原则(非常重要)
    1、查询频繁的字段
    2、更新频繁的不要新建
    3、数据区分度不高的不要建
    4、查询少,重复值很高的字段不要建
    5、长字符串字段不要建
    6、尽量扩展索引而不是新建
    7、最左前缀匹配原则,判断从左到右依次到匹配有范围查询的判断条件。所以建立组合索引,应该把等值判断的条件放在前面。在使用时,将第一个索引放在判断条件最前面。
    12、前缀索引如何建立
    使用count()/count(distinct left(password,prefixLen)),接近1时就可以
    13、删除大量数据时,怎么删除
    先删除索引,再删除数据。会快速很多,之后在重新建立索引。
    14、什么是聚簇索引,什么是非聚簇索引
    聚簇索引就是数据存储和索引存放在一起的
    非聚簇就是没有存放在一起,只是存放了数据存储地址,还要回表查询。
    15、慢查询
    慢查询是用于发现SQL查询问题的,可以手动更改设慢查询时间,后通过设置到表,进行查询发现
    16、SQL分析EXplain注意的列
    type—-看什么级别,all全表扫描就不可取
    possiblekeys—-可能命中的索引
    key—实际命中的索引
    rows—实际扫描了多少行数据
    17、profile是分析SQL执行过程
    18、联合索引查询时的覆盖索引和回表指的是什么
    回表指的是命中辅助索引,辅助索引中存放的是主键索引的key值,需要在通过主键索引去查找值
    覆盖索引指的是查询的字段和命中的索引字段是一个字段,就直接返回。
    19、分页查询偏移量大的时候,怎么进行优化
    可以先通过索引列去查询到偏移量的位置,在进行查询,分页数据。
    20、主从同步的原理
    主从同步是主机记录binlog操作日志,然后从机通过一个线程监听主机binlog,然后使用主机提供的账号去回去binlog更新内容,之后生成中继日志readylog,再讲readylog转换成SQL语句,进行数据库操作
    21、联合索引的最左匹配原则
    联合索引在使用时,如果没有使用到最左边的主要索引,那么即时是使用了联合索引的辅助索引也是没有用的。
    22、反三范式如何保证数据统一
    可以使用触发器,当主表数据更新,触发更新,额外发送一条SQL同步。
    23、索引失效的场景
    1、使用了or
    2、like前置匹配
    3、查询条件字段使用了函数运算
    4、in 子查询语句
    5、is null 可以通过设置null为0 来解决
    24、count(
    )如何优化
    数据量过于大,可以使用单独建立一张表记录数据。其他还是推荐count(*)
    25、SQL死锁问题怎么解决
    26、DQL怎么优化
    小标驱动大表
    在查询条件中使用索引
    避免使用范围判断条件,!=等等
    27、为什么使用B+树作为存储引擎的数据结构存储方式
    1、B+树分为内部节点和叶子节点,内部节点默认大小为16KB,并且只用于存储key和地址值,能够使树的高度更矮,减少IO
    2、叶子节点存储数据是通过链表方式,支持范围和有序
    3、每次IO时间稳定。