Mysql索引,有哪几种索引,什么时候该(不该)建索引;SQL怎么进行优化以及SQL关键字的执行顺序

时间:2021-04-01 03:51:21

索引Index)是帮助MySQL高效获取数据的数据结构。提取句子主干,就可以得到索引的本质:索引是数据结构

1、按照索引列值的唯一性,索引可分为唯一索引和非唯一索引

  非唯一索引B树索引

  create index 索引名 on 表名(列名) tablespace 表空间;

  唯一索引:建立主键或者唯一约束时会自动在对应的列上建立唯一索引

2、索引列的个数:单列索引和复合索引

3、按照索引列的物理组织方式

  B树索引

  create index 索引名 on 表名(列名) tablespace 表空间;

  位图索引

  create bitmap index 索引名 on 表名(列名) tablespace 表空间;

  反向键索引

  create index 索引名 on 表名(列名) reverse tablespace 表空间名;

  函数索引

  create index 索引名 on 表名(函数名(列名)) tablespace 表空间名;

运用索引的条件

1、较频繁地作为查询条件的字段

2、唯一性太差的字段不适合建立索引

3、更新太频繁地字段不适合创建索引

4、不会出现在where条件中的字段不该建立索引

SQL优化

1、避免使用select * ,而是具体指出选择哪些列

2、SQL大小写,数据库在解析sql时,先把SQL语句转换为大写,再进行解析操作,所以建议直接提供大写的SQL语句。

3、过滤时,>和>=,使用>=优先,如a>2000和a>=2001,这样可以避免过滤2000和2001之间的小数,可以调高效率

4、where子句中,不等于判断会使索引失效。

5、where子句中,对列做运算,例如,加减乘除,会使索隐列失效。所以尽量不要在索隐列上做操作。

6、模糊查询时,like "%abc%",前模糊会导致索引失效,后模糊不会导致索引失效。

SQL Select语句完整的执行顺序

1from子句组装来自不同数据源的数据;
2where子句基于指定的条件对记录行进行筛选;
3group by子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用having子句筛选分组;
6、计算所有的表达式;
7、使用order by对结果集进行排序。
8select 集合输出。