对SQL的理解,很重要

> 最直接的就是你代码写出来的质量,本质上就是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);

```