首页 > 其他 > 详细

聚簇索引与索引覆盖

时间:2014-03-30 04:47:02      阅读:479      评论:0      收藏:0      [点我收藏+]

对于表:

create table heyf_2 (id serial, ver int(10)

name char(5)) ;

engine=innodb;

而在heyf_2上对id和ver上加复合索引。

需要对表中插入百万数据(用mysql的存储过程)

对于两条语句查询:

1)select id from heyf_2  order by id    很慢

2)select id from heyf order by id,vef    很快

为什么上面语句会差距在数量级上呢,我们要从innodb的索引原理上分析

innodb是btree树那样,每个数据都是存放在页上,可以类比是每一个单独的块。对于第一条语句,是根据id排序,分配在每个页上,但是它本身块上数据很大,而查到位置要不断打开页,再关闭,这是资源额。对于第二条语句,用到了索引覆盖,id只需要在id和ver复合索引里找到。


如果是myisam就差不多了,因为myisam是一行一行的,顺序的,差别不会那么大

delimiter $$
SET AUTOCOMMIT = 0$$
create  procedure test1()
begin
declare v_cnt decimal (10)  default 0 ;
dd:loop
          insert into heyf_2 values (null,‘aaaaa‘),(null,‘aaaaa‘),(null,‘aaaaa‘),(null,‘aaaaa‘),(null,‘aaaaa‘),
                  (null,‘aaaaa‘),(null,‘aaaaa‘),(null,‘aaaaa‘),(null,‘aaaaa‘),(null,‘aaaaa‘);
                  commit;
                    set v_cnt = v_cnt+10 ;
                           if  v_cnt = 10000 then leave dd;
                          end if;
         end loop dd ;
end;$$fenxi

本文出自 “Linux运维” 博客,请务必保留此出处http://2853725.blog.51cto.com/2843725/1386572

聚簇索引与索引覆盖,布布扣,bubuko.com

聚簇索引与索引覆盖

原文:http://2853725.blog.51cto.com/2843725/1386572

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!