索引
索引是对查询性能优化最常用的手段,简单理解就是根据指定的字段重新组织排序结构,如果查询条件中有用到建立了索引的字段,将会得到性能的提升.
原理:
- 通过不断地缩小想要获取数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件.
- 这里用的是b+树结构,还有FULLTEXT,HASH.
- 如图,每次都能趋近更小的范围.
注意事项:
- 不是任何时候创建索引都能提高查询效率的,以查询为主,修改表的操作很少时使用索引性价比才高.
- 每次新建索引都要重新构建一次索引,如果数据量大的话构建索引也要一定的开销.
- 如果数据库表的读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,主要是查询数据时创建索引可以指数倍的提高查询性能,修改表的效率会有一点降低.
- 在使用InnoDB存储引擎的时候,每建一个表,应该给一个主键,这个主键就是索引的一种,MySQL8默认的引擎就是InnoDB.
- 索引的复杂度和树的高度息息相关,尽量使用字段长度小的字段建立索引.
创建索引
- 查看索引
show index from 表名
- 创建索引:
crete index 索引名 on 表名(表中的字段名(此字段长度))
如果字段是字符串类型,需要指定长度
如果字段不是字符串类型,可以不指定长度
测试索引
- 开启检测
set profiling = 1;
- 查看每一个sql执行的时间
show profiles;
执行SQL前开启检测,然后可以查看执行用时,用来做对比.
我这里准备了一张1000条数据的表,用python循环插入就行了,一万条,十万条都行,我这就用1000条吧.
这里看也就快了一倍左右,因为数据量较少,数据量越大差距也会越大,这样测试时间也会不稳定,但足以证明索引能够提高查询的效率了.
删除索引
- 删除索引:
drop index 索引名 on 表名;
总结性文章,比较浅显.
如有错误,还望指出