索引的原理:
如果我们在根据条件搜索数据时,通常是在数据文件中,把数据全部遍历一遍然后取出数据。
MySQL中索引默认是使用B+Tree存储的,这种数据结构最擅长的就是搜索数据,几千万行的索引数据能很快就搜索到目标数据,这时索引在数据量很大的情况下,索引就相当的重要。
在MySQL中,主键PRIMARY KEY会自动创建索引,唯一约束UNIQUE字段也会自动创建索引。
索引的好处:
1、索引大大减小了服务器对数据库的扫描量,从而加快数据的检索速度;
2、索引可以帮助服务器避免排序时创建临时表,减少数据的排序次数,降低CPU的消耗;
3、索引可以随机IO读取变成顺序IO读取,顺序IO读取的速度明显提升;
4、对应InnoDB引擎,索引可精确定位范围数据,在查询时可以精确添加行级锁,提高访问的并发。
索引的缺点:
1、索引在进行修改添加删除数据时,数据库引擎会进行索引的维护,增加了相关操作的速度;
2、建立索引文件会额外占用物理空间,数据越多创建的索引也会随之增大。
应该创建的索引:
1、在需要经常搜索的列上添加索引,加快搜索速度;
2、在主键约束字段,强制唯一和组织好顺序,如果不是顺序的,会导致添加数据时频繁的进行索引排序,降低数据添加的效率;
在经常JOIN连接的列上添加索引,加快连接的速度;
3、在需要进行范围搜索的列上添加索引,因为索引已经排好顺序了,范围搜索使用索引可以快速定位查询范围;
4、在经常需要进行排序的字段上添加索引,利用索引的排序特性,排序时不用再次去进行排序计算;
不该创建的索引:
1、不该在很少用的字段上创建索引,创建索引会消耗资源,很少用到的字段没有创建价值;
2、不该在重复值过多的列上创建索引,重复值过多,搜索时会遍历所有的重复值,和没有索引一样;
3、不该在大字段的列(text,bit,clob)上创建索引,大字段创建索引,索引会非常大;
4、不该在频繁修改的字段列上添加索引,索引只能加快查询速度,会降低更新速度;