mysql索引学习教程索引学习教程
在mysql 中,索引可以分为两种类型 hash索引和 btree索引。
什么情况下可以用到什么情况下可以用到B树索引?树索引?
1.全值匹配索引
比如:
orderID=”123”
2.匹配最左前缀索引查询
比如:在userid 和 date字段上创建联合索引。
那么如果输入 userId作为条件,那么这个userid可以使用到索引,如果直接输入 date作为条件,那么将不能使用到索引。
3.匹配列前缀查询
比如: order_sn like ‘134%’ 这样可以使用到索引。
4.匹配范围值查询
createTime>’2015-01-09′ and createTime<‘2015-01-10’
5.精确匹配左前列并范围匹配另外一列
比如:
userId=1 and createTime>’2016-9-18′
6.只访问索引的查询,称为覆盖索引,及索引包括查询列的数据。
BTREE索引的限制索引的限制
1.如果不是按照索引的最左列开始查找,则无法使用索引。
比如创建联合索引:
orderId ,createTime 字段创建联合索引,如果只是输入 createTIme的条件,没有orderid的条件,那么将不能使用此索引。
2.使用索引时不能跳过索引的列。
三列:
日期,姓名,电话 组成列和索引,如果查询时 只输入 日期 和电话,那么只能使用日期作为索引进行过滤。
3.NOT IN 和 <> 操作无法使用索引。
4.如果查询中有某个列的范围查询,则其右边所有列都无法使用索引。
hash 索引的特点索引的特点
hash索引是基于hash表实现的,只有查询条件精确匹配hash 索引中的所有列时,才能使用hash索引。只能是等值查询。
对于hash索引中的所有列,存储引擎都会为每一行计算一个hash码,hash索引中存储的就是hash码。
限制:
1.必须两次读取,先读取hash 找到对应的行,再读取对应的行数据。
2.hash索引无法用于排序。
3.只支持精确查找,不支持部分索引查找,也不支持范围查找。
hash冲突:冲突:
hash 索引不能使用于选择性很差的字段,而要用在比如 选择性强的列上创建hash索引。
比如:不要在性别字段上创建hash索引。
为什么要使用索引?为什么要使用索引?
评论0