MySQL 聚集索引 辅助索引 覆盖索引

drop TABLE if EXISTS test_order;
create table test_order
(
    id int auto_increment primary key,
    user_id int,
    order_id int,
    order_status tinyint,
    create_date datetime
);
create index idx_userid_order_id_createdate on test_order(user_id,order_id,create_date);
show index from test_order;

drop PROCEDURE IF EXISTS test_insertdata;
delimiter //
CREATE PROCEDURE `test_insertdata`(IN `loopcount` INT)
BEGIN
    declare v_uuid  varchar(50);
    while loopcount>0 do
        set v_uuid = uuid();
        insert into test_order (user_id,order_id,order_status,create_date) values (rand()*1000,rand()*1000,rand()*10,DATE_ADD(NOW(), INTERVAL - RAND()*20000 HOUR));
        set loopcount = loopcount -1;
    end while;
END;
//
delimiter ;
SET @loopcount = 1000000;
CALL test_insertdata(@loopcount)

环境:100w条数据

 

不添加索引 VS 添加索引 

不添加索引:

搜索时间为0.348秒

添加索引:

搜索时间大概为0.048秒

聚集索引  VS 辅助索引

 

聚集索引:

 

辅助索引:

create index idx_userid_order_id_createdate on test_order(user_id,order_id,create_date);

因为联合索引中没有order_status这个字段,所以辅助索引查询到主键后再查询聚集索引,找到order_status这个字段的值。分成两部。所以消耗的时间比聚集索引时间要长。

 

覆盖索引 VS 辅助索引

--Using index 
--查询的列被索引覆盖,并且where筛选条件是索引的是前导列,Extra中为Using index
explain select user_id, order_id,create_date from test_order where user_id = 1;


explain select * from test_order where user_id = 1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值