MYSQL索引

索引存储类型

  • B-Tree索引

B-Tree对索引列是顺序组织存储的,索引很适合查找范围数据。

 

B-Tree索引的限制

不能跳过索引中的列

 

  • 哈希索引(hash index)

哈希索引只包含哈希值和行指针,不存储字段值;

对于每一行数据,存储引擎都会对所有的索引列计算一个哈希值(hash code),哈希值是一个较小的值,并且不同键值的行计算出来的哈希值不一样。哈希索引将所有的哈希值存储在索引中,同时保存指向每个数据行的指针,这样就可以根据,索引中寻找对于哈希值,然后在根据对应指针,返回到数据行;

 

哈希索引限制

哈希索引数据并不是按照索引值顺序存储的,索引也就无法用于排序;

哈希索引页不支持部分索引列匹配查找,因为哈希索引始终是使用索引列的全部内容计算哈希值的;

哈希索引只支持等值比较查询,包括=,in(),<=>,不支持任何范围查询。列入where price>100;

数据相同的列值, 计算出来的hashcode也是一样的, 查询性能就没有太大的优势;

 

 

索引的类型

  • UNIQUE (唯一索引):不可以出现相同的值,可以有NULL值;
  • INDEX (普通索引):允许出现相同的索引内容;
  • PROMARY KEY(主键索引):不允许出现相同的值;
  • FULLTEXT (全文索引):可以针对值中的某个单词,但效率确实不敢恭维;
  • 组合索引:实质上是将多个字段建到一个索引里,列值的组合必须唯一;

 

查看表中的索引

show index from 表名;

创建索引

ALTER TABLE 表名 ADD 索引类型 (unique,primary key,fulltext,index)[索引名](字段名);

drop index index_name on table_name;

 

索引的使用

  • 提高了查询速度,会降低更新表的速度 
  • 索引不会包含有NULL的列
  • 索引列排序

mysql查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。

  • like语句操作

一般情况下不鼓励使用like操作,如果非使用不可,注意正确的使用方式。like ‘%aaa%’不会使用索引,而like ‘aaa%’可以使用索引。

  • 不要在列上进行运算
  • 不使用NOT IN 、<>、!=操作,但<,<=,=,>,>=,BETWEEN,IN是可以用到索引的
  • 索引要建立在值比较唯一的字段上
  • 在where和join中出现的列需要建立索引
  • join的列类型要相同

在join操作中(需要从多个数据表提取数据时),mysql只有在主键和外键的数据类型相同时才能使用索引,否则及时建立了索引也不会使用。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值