索引使用技巧及sql书写规范

一. 了解索引的种类和用法(这里只探究BTree索引的用法)

1. 唯一索引

唯一索引不允许两行具有相同的索引值。如果是多列构成的唯一索引,则要求多列的组合值不能出现相同

2. 组合索引

组合索引又称复合索引,由多列构成。在使用组合索引时,需要保证复合索引的第一列在语句中使用了索引,在合适的场景可以避免回表查询,在索引中完成查询。

二. 建立索引的技巧

1.为主键,外键以及对记录起明显标识作用的字段建立索引

这些字段通常会用作条件筛选,表连接,以及排序分组,为这些字段加上单个索引可以缩短sql执行的时间

2.在业务相近的字段上建立组合索引

将一些经常出现在一个结果集中的字段按照顺序建立组合索引,通常把筛选效果明显的字段放在组合索引的前面。

3.在必须要前导模糊查询的字段在建立全文索引

前导模糊查询 '%str','%str%'会导致普通索引失效,要想使用索引需要建立全文索引(FULLTEXT INDEX)

4.在不合适的字段上不建索引

一些字段不适用用来建立索引,非但不会优化查询效率,反而会使查询效率变得十分低下。
如:
筛选效果不明显的字段: 筛选后的结果集相对总数据量占比很大时,需要重复的去索引树中检索到行数据标识ROWID,然后去表中取出数据。这样的查询效率甚至会比全表扫描更低。
字段长度非常大的字段: 备注,大文本等类型的字段在建立索引时,需要消耗很大的空间去存放索引树

三. 什么情况下会使用索引

COLUMN_INDEX =(>,>=,<,<=) ?
COLUMN_INDEX BETWEEN ? AND ?
COLUMN_INDEX IN (?,?,?)
COLUMN_INDEX LIKE 'str?' (后导模糊查询)
TABLE1.COLUMN_INDEX = TABLE2.COLUMN_INDEX (表关联)

书写SQL的规范

1. 会引起索引失效的SQL

使用not,!=,
使用前导模糊查询'%str',‘%str%’,
对索引字段使用函数 tip: where id + 1 = 123
对索引字段进行类型转换 tip: where type = 2 (type 为varchar 类型,此时type_index索引失效)
使用order by排序时,tip: 使用普通索引时,如果结果集为 * 时,不走索引;使用复合索引,如果sql语句使用索引字段的顺序和复合索引字段顺序不一致时,不走索引

2. 一些低效的sql

整理好后继续发布

你可能感兴趣的:(索引使用技巧及sql书写规范)