1 Btree有效索引

=, IN(), IS NULL, or IS NOT NULL,>, <, >=, <=, BETWEEN, !=, or <>,当通过like进行前缀匹配时,Btree的前缀索引也是有效的。

1.1 索引失效类型

  1. 对索引使用**左或者左右模糊匹配**
  2. 对索引使用**函数**
  3. 对索引进行**表达式计算**
  4. 对索引**隐式类型转换**
  5. 联合索引非最左匹配

2 索引优化

当使用索引列进行查询的时候尽量不要使用表达式,把计算放到业务层而不是数据库层 尽量使用主键查询,而不是其他索引,因此主键查询不会触发回表查询 使用前缀索引 使用索引扫描来排序 union,all,in,or都能够使用索引,但是推荐使用in 范围列可以用到索引 强制类型转换会全表扫描 更新十分频繁,数据区分度不高的字段上不宜建立索引 创建索引的列不允许为null,可能会得到不符合预期的结果 当需要进行表连接的时候,最好不要超过三张表,因为需要join的字段数据类型必须一致 能使用limit的时候尽量使用 单表索引建议控制在5个以内 单索引字段数不允许超过五个(组合索引)

2.1 join的原则

数据量小的表写在join的左边,数据量大的表写在join的右边

<aside> 💡

1 索引的实现方式

1.1 Hash

通过hash算法运算直接找到行记录 但是hash不是按顺序排列,范围查找中无法适用

2 索引类型

2.1 主键索引**(Primary Key)**

CREATE TABLE example (
    id INT NOT NULL,
    name VARCHAR(100),
    PRIMARY KEY (id)  -- 创建主键索引
);
# 添加主键
ALTER TABLE example ADD PRIMARY KEY (id);

2.2 唯一索引(Unique Index)