索引是建立在数据库表中的某些列的上面 。因此 , 在创建索引的时候 , 应该仔细考虑在哪些列上可以创建索引,在哪些列上不能创建索引 。一般来说,应该在这些列上创建索引,例如:在经常需要搜索的列上,可以加快搜索的速度;在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构;在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度;在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;在经常需要排序的列上创建索引 , 因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间;在经常使用在WHERE子句中的列上面创建索引 , 加快条件的判断速度 。
同样 , 对于有些列不应该创建索引 。一般来说 , 不应该创建索引的的这些列具有下列特点:第一 , 对于那些在查询中很少使用或者参考的列不应该创建索引 。这是因为,既然这些列很少使用到,因此有索引或者无索引 , 并不能提高查询速度 。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求 。第二,对于那些只有很少数据值的列也不应该增加索引 。这是因为 , 由于这些列的取值很少 , 例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例 , 即需要在表中搜索的数据行的比例很大 。增加索引 , 并不能明显加快检索速度 。第三 , 对于那些定义为text, image和bit数据类型的列不应该增加索引 。这是因为 , 这些列的数据量要么相当大,要么取值很少 。第四,当修改性能远远大于检索性能时 , 不应该创建索引 。这是因为,修改性能和检索性能是互相矛盾的 。当增加索引时,会提高检索性能,但是会降低修改性能 。当减少索引时,会提高修改性能,降低检索性能 。因此,当修改性能远远大于检索性能时 , 不应该创建索引 。
Mysql建立索引经验在实际开发中使用数据库时,难免会遇到一些大表数据,对这些数据进行查询时,有时候SQL会查询得特别慢,这时候 , 有经验的老师傅会告诉你 , 你看一下哪几个字段查的多,加一个索引就好了 。
那么,怎么合理地建立索引呢?这里分享一下我的一些经验,如有不妥之处 , 欢迎批评指正 。
1、不要盲目建立索引,先分析再创建
索引虽然能大幅度提升我们的查询性能,但也要知道,在你进行增删改时,索引树也要同样地进行维护 。所以 , 索引不是越多越好,而是按需建立 。最好是在一整块模块开发完成后,分析一下,去针对大多数的查询,建立联合索引 。
2、使用联合索引尽量覆盖多的条件
这是说在一个慢sql里假如有五个where ,一个 order by ,那么我们的联合索引尽量覆盖到这五个查询条件,如果有必要,order by 也覆盖上。
3、小基数字段不需要索引
这个意思是,如果一张表里某个字段的值只有那么几个,那么你针对这个字段建立的索引其实没什么意义,比如说,一个性别字段就两种结果,你建了索引,排序也没什么意思(也就是索引里把男女给分开了)
所以说,索引尽量选择基数大的数据去建立,能最大化地利用索引
4、长字符串可以使用前缀索引
我们建立索引的字段尽量选择字段类型较小的,比如一个varchar(20)和varchar(256)的,我们在20的上面建立的索引和在256上就有明显的差距(字符串那么长排序也不好排呀 , 唉) 。
推荐阅读
- 如何挂掉微信视频号功能,如何挂掉微信视频号功能设置
- 电商基地如何做,关于电商基地建设的方案
- 切水果工具直播,切水果的工具一套
- linux命令刷机 linux系统刷新命令
- 如何构建冲突营销体系,如何构建冲突营销体系
- 微信读书安卓平板,微信读书安卓平板能用吗
- 配电脑网站制作,做网站的电脑配置
- java代码药店管理系统 javaweb医药管理系统
- css样式代码大全行内元素的简单介绍