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结果如下:
通过 type = ALL 可知进行了全表扫描
我的疑问是:既然二级索引(UNIQUE_ORDER_CODE)已将ORDER_CODE排序,SQL的逻辑为什么不是先从二级索引中取前1000个ORDER_CODE,再根据这1000个ORDER_CODE到聚簇索引中回表查询出ORDER_AMOUNT呢?MySQL为何会判定这种场景需要进行全表扫描呢?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…