索引:提高数据查询的速度,一般创建索引的列为很少改动的列。
1、例句: select * from user where userId = '123456789';
userId很少改变且是唯一值,可以对userID创建索引;
2、例句:select * from user where name = '李明' and age = 26;
如果name和age是不能为null的列,那么我们可以对这两列单独建立索引,但是如果经常使用这两列进行查询,就要创建复合索引(name, age);
3、例句:select * from user where name = '李明' and age = 26 and height = 175;
此时我们既想满足上面的条件又想满足下面的查询语句的条件的索引,可以会创建两个索引(name,age)和(name,age,height),但是通常可以创建复合索引(name,age,height)即可,因为复合索引满足最佳左前缀原则,会创建以下三个索引(name,age,height)、(name,age)、(name);
4、例句:select * from user where number like '2017%';
学号是按年月日+四位数字,此时想查学号的年份是2017的学生,为了提高查询速度,如果对number建立索引使用,模糊查询(%123%)索引会失效,此时可以使用短索引,也就是只对number的前缀,前四位创建索引即可。
5、select * from user where grade = '二年级' order by number;
查询二年级的学生并对其进行排序,此时如果对grade和number分别创建了索引,采用上面的方式进行查询时,索引是没有效果的,因为where子句中已经有了索引,此时order by中的索引不会生效,导致整个sql语句的索引都不会生效。
6、select * from user where year(time) < 2017 and grade not in ('二年级','三年级');
此时无论是建立在time还是grade的索引都会失效,索引的列是不能进行计算的,采用计算该列的索引就会失效,使用not in 语句也会失效,不过可以使用not exists代替。
通常索引的列可以进行<,>,=,<=,>=,between,in操作。
如果sql语句中包含or,<>,like '%123',所在列不能null,尽量不要在重复值过多的列创建索引
7、in和not in在主键上的唯一索引是可以使用的,但是在其他不是唯一索引列索引是失效的。
以上就是一些简单索引创建的选择,但是越复杂的索引创建肯定不是这样简单的,后面会给大家继续更新