> 最直接的就是你代码写出来的质量,本质上就是SQL转换成代码
第一例子:
一般常见的数据库字段`state`,字段一般是`tinyint`表示多种状态;此时数据表数据量过大,该不该给`state`加索引呢;如果要加,为何?不需要,又是为何?
> 惯性思维:state标识状态,筛选出来的结果会很少,通常是不会去加这个索引;
另一个比较常见的例子:统计多维度的数据,这些维度有上下级的关系:
一条SQL,查询条件有多个,怎么设计索引更有效?如,字段`a`和字段`b`,都是常用的查询条件,存在`a`,`b`单独查询的场景
```sql
select * from `posts` where `a` = 'lisi' and `b` = 1001;
```
如何创建索引,更有效?
如果`a`和`b`是独立的两个索引,此条SQL是否都能用上?
> 首先肯定是要一个联合索引的,其次就是需要一个独立的索引,`a`还是`b`,可以从两个字段的颗粒度去判断,谁更细? 假设这里通过`a`查询出来的数据更精准;
```sql
-- 联合索引 a生效, ab也生效
CREATE INDEX idx_ab ON posts(a, b);
-- 字段 b 创建普通索引,用于b单独出现再查询条件的情况
CREATE INDEX idx_b ON posts(b);
```