mysql:索引

MySQL主要有两种结构:
    Hash索引
    B+ Tree索引(InnoDB引擎)

B+ Tree索引和Hash索引区别?
    哈希索引适合等值查询,但是无法进行范围查询
    哈希索引没办法利用索引完成排序
    哈希索引不支持多列联合索引的最左匹配规则
    如果有大量重复键值的情况下,哈希索引的效率会很低,因为存在哈希碰撞问题

覆盖索引(covering index)指一个查询语句的执行只用从索引中就能够取得,不必从数据表中读取。也可以称之为实现了索引覆盖。
当一条查询语句符合覆盖索引条件时,MySQL只需要通过索引就可以返回查询所需要的数据,这样避免了查到索引后再返回表操作,减少I/O提高效率。

索引失效:
    没有遵循最左匹配原则(组合索引的第一个字段必须出现在查询语句中)
    or、!=、not in、is [not] null
    like '%……'
    隐式转换
    索引字段应用内部函数或运算

三范式:
    原子性:数据列不可再分
    每一行数据具有唯一性,并消除数据之间的"部分依赖"(联合主键)
    独立性、消除传递依赖
    
数据库优化:
    优化sql
    创建索引
    分表:水平分表(数据比较多)、垂直分表(字段值比较少使用)
    读写分离
    缓存:使用redis作为中央缓存,在持久层(dao)和数据库之间添加一个缓存层
    
慢查询定位:
    set GLOBAL slow_query_log = ON;
    set GLOBAL slow_query_time = 1;
    explain 需要执行的sql;

你可能感兴趣的:(MySQL)