Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
388 views
in Technique[技术] by (71.8m points)

MySQL:覆盖索引实例请教

CREATE TABLE T_ORDER?(
    ID INT?PRIMARY?KEY?AUTO_INCREMENT,--?自增主键
    ORDER_CODE VARCHAR?(10)?NOT?NULL,--?订单编码
    ORDER_AMOUNT INT NOT NULL,--?订单数量
    UNIQUE?KEY?UNIQUE_ORDER_CODE?(ORDER_CODE)?
);

1、创建订单表(T_ORDER),订单表中包含订单编码(ORDER_CODE)、订单数量(ORDER_AMOUNT)
2、向订单表(T_ORDER)中插入五万条测试数据

EXPLAIN SELECT?ORDER_CODE,?ORDER_AMOUNT?FROM?T_ORDER?ORDER?BY?ORDER_CODE?LIMIT?1000;

EXPLAIN结果如下:1111.png
通过 type = ALL 可知进行了全表扫描

我的疑问是:既然二级索引(UNIQUE_ORDER_CODE)已将ORDER_CODE排序,SQL的逻辑为什么不是先从二级索引中取前1000个ORDER_CODE,再根据这1000个ORDER_CODE到聚簇索引中回表查询出ORDER_AMOUNT呢?MySQL为何会判定这种场景需要进行全表扫描呢?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

或者数据量太小了?

你加到百万试试看呢


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...