[MySQL] ORDER BY 未能使用索引排序 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fuxinya
V2EX    数据库

[MySQL] ORDER BY 未能使用索引排序

  •  
  •   fuxinya 2019-03-16 12:23:25 +08:00 2666 次点击
    这是一个创建于 2402 天前的主题,其中的信息可能已经有所发展或是发生改变。

    订单表建立了一个联合索引 index_order_store: [ store_id, create_time]

    查询:

    SELECT * FROM orders WHERE store_id = 100001 ORDER BY orders.create_time DESC LIMIT 0,2 

    EXPLAIN 显示扫描了店铺的所有订单(扫描了 14 行),并没有使用索引排序。

    SIMPLE orders ref index_order_store index_order_store 5 const 14 Using where 

    哪个地方错了

    13 条回复    2019-03-17 09:30:55 +08:00
    ilyh
        1
    ilyh  
       2019-03-16 12:28:04 +08:00
    全表才 14 行数据, mysql 会做优化, 直接全表扫描更快吧
    fuxinya
        2
    fuxinya  
    OP
       2019-03-16 12:30:10 +08:00
    @ilyh #1 我多造点数据试试
    ilyh
        3
    ilyh  
       2019-03-16 12:32:57 +08:00
    type 为 ref 已经走了索引了啊...
    ilyh
        4
    ilyh  
       2019-03-16 12:37:20 +08:00
    估计是 store_id = 100001 就有 14 行吧
    kaid97
        5
    kaid97  
       2019-03-16 12:46:29 +08:00
    ref 就是使用了索引,而且返回值也只有一条
    fuxinya
        6
    fuxinya  
    OP
       2019-03-16 12:52:34 +08:00
    @ilyh #4 刚刚给店铺 100001 造了 100 条数据,又给另一个店铺也造了 200 条,查询结果:扫描了 100 行。现在的问题是虽然 store_id 走了那个联合索引,但是对 create_time 排序没有使用索引,SQL 语句中限制了条数:LIMIT 0,2。 但是却扫描了 100 行。期望是仅扫描 2 行。
    难道是我认知错误了,ORDER BY 永远不会索引?
    fuxinya
        7
    fuxinya  
    OP
       2019-03-16 12:53:50 +08:00
    @kaid97看下#6 我的回复,问题描述补充了一下
    ilyh
        8
    ilyh  
       2019-03-16 12:56:31 +08:00
    不是 orderby 不走索引, 是 limit 是读到所有匹配行再保留第一行
    polythene
        9
    polythene  
       2019-03-16 13:28:10 +08:00
    用 force index 强制走索引吧
    ToTChowChow
        10
    ToTChowChow  
       2019-03-16 13:29:25 +08:00 via Android
    SELECT store_id, create.time
    FROM orders
    WHERE store_id = 100001
    ORDER BY orders.create_time DESC
    LIMIT 0,2

    改成这样?
    harde
        11
    harde  
       2019-03-16 13:36:57 +08:00
    歪个楼。。。。 在做这样的测试时,建议造个几十万条数据。。。 很多时候还是数据库聪明。
    fuxinya
        12
    fuxinya  
    OP
       2019-03-16 13:40:42 +08:00
    @harde 好的,马上试试。可能还是数据量不够,认为不走索引排序更快
    constructor
        13
    constructor  
       2019-03-17 09:30:55 +08:00
    原来和数据量有关系,我之前也有这样的疑问,一度误以为对索引的理解有偏差
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3549 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 00:08 PVG 08:08 LAX 17:08 JFK 20:08
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86