覆盖索引---MyISAM 与 InnoDB

覆盖索引—MyISAM 与 InnoDB

如果索引包含满足查询的所有数据,就称为覆盖索引。
覆盖索引是一种非常强大的工具,能大大提高查询性能。只需要读取索引而不用读取数据有以下一些优点:
(1)索引项通常比记录要小,所以MySQL访问更少的数据;
(2)索引都按值的大小顺序存储,相对于随机访问记录,需要更少的I/O;
(3)大多数据引擎能更好的缓存索引。比如MyISAM只缓存索引。
(4)覆盖索引对于InnoDB表尤其有用,因为InnoDB使用聚集索引组织数据,如果二级索引中包含查询所需的数据,就不再需要在聚集索引中查找了。
覆盖索引不能是任何索引,只有B-TREE索引存储相应的值。而且不同的存储引擎实现覆盖索引的方式都不同,并不是所有存储引擎都支持覆盖索引(Memory和Falcon就不支持)。
对于索引覆盖查询(index-covered query),使用EXPLAIN时,可以在Extra一列中看到“Using index”。


MyISAM

create table people(
    pid int not null auto_increment,
    pname varchar(50) not null,
    age int not null,
    primary key (pid),
    key (pname)
) engine MyISAM;

insert into people (pname,age) values ('a',11);
insert into people (pname,age) values ('b',12);
insert into people (pname,age) values ('c',13);
explain select pid, pname from people where pname='a';

MYISAM查询结果

InnoDB

create table man(
    mmid int not null auto_increment,
    mname varchar(50) not null,
    mage int not null,
    primary key (mmid),
    key (mname)
) engine InnoDB;

insert into man (mname,mage) values ('a',11);
insert into man (mname,mage) values ('b',12);
insert into man (mname,mage) values ('c',13);
explain select mmid, mname from man where mname='a';

INNODB

通过上面的结果对比可以看出InnoDB用到了覆盖索引而MyISAM没有!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值