MySQL 分页查询性能比较 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
zioc
V2EX    MySQL

MySQL 分页查询性能比较

  •  
  •   zioc 2017-04-01 10:14:43 +08:00 5873 次点击
    这是一个创建于 3194 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请问这两种写法哪一种好呢?

    SELECT * FROM API_LOG a JOIN (select ID from API_LOG LIMIT 0, 10) b ON a.ID = b.ID

    SELECT * FROM API_LOG WHERE ID IN ( SELECT * FROM (SELECT ID FROM API_LOG LIMIT 0, 10) t)

    24 条回复    2017-04-17 07:12:27 +08:00
    8355
        1
    8355  
       2017-04-01 10:19:20 +08:00
    没太看懂你写的 sql
    不过问性能来说你运行一下就知道了啊.
    AlisaDestiny
        2
    AlisaDestiny  
       2017-04-01 10:19:31 +08:00
    这个你可以自己测下的。表里插入 1W 假数据。每个 sql 语句执行十次。看平均时间。
    killerv
        3
    killerv  
       2017-04-01 10:22:25 +08:00 via iPhone
    mysql 子查询比较坑,慎重使用。
    zioc
        4
    zioc  
    OP
       2017-04-01 10:29:31 +08:00
    @killerv 确实
    @8355
    @AlisaDestiny
    测了 第一种快很多
    8355
        5
    8355  
       2017-04-01 10:32:38 +08:00
    @zioc #4 可我觉得 join 更加坑. 可能你测试的数据量还没到
    zioc
        6
    zioc  
    OP
       2017-04-01 10:33:41 +08:00
    @8355 几万条吧 满足需要了
    JKeita
        7
    JKeita  
       2017-04-01 10:47:58 +08:00
    explain 一下看了下查询,应该是第一条比较快
    surfire91
        8
    surfire91  
       2017-04-01 10:50:26 +08:00
    恕我眼拙,这个跟 SELECT * FROM API_LOG LIMIT 0, 10 有啥区别
    fxxkgw
        9
    fxxkgw  
       2017-04-01 10:55:58 +08:00
    没看懂 但是慎用笛卡尔积
    raycloud
        10
    raycloud  
       2017-04-01 10:58:14 +08:00
    @surfire91 #8 +1 ,没看懂为什么要写的这么复杂
    qfdk
        11
    qfdk  
    PRO
       2017-04-01 11:33:11 +08:00 via iPhone
    加个 index 有想不到的结果
    zander1024
        12
    zander1024  
       2017-04-01 12:29:37 +08:00
    我不懂这个 Join 有卵用?.. 可能是我 mysql 学的假的
    AnonymousAccout
        13
    AnonymousAccout  
       2017-04-01 12:33:54 +08:00 via iPhone
    好吧 第二个里的子查询那个 select * from 也没用吧...
    sujin190
        14
    sujin190  
       2017-04-01 13:00:34 +08:00
    WHERE IN 又子查询在 mysql 上的实现似乎是上一级的查询的每一条数据做一次子查询, mysql 文档上似乎有详细解释,可以去看下,我记得是这么写的,还是用第一种好
    luckyduck
        15
    luckyduck  
       2017-04-01 13:03:16 +08:00
    楼上看不懂的是因为不了解什么叫覆盖索引。。。
    sujin190
        16
    sujin190  
       2017-04-01 13:11:35 +08:00
    danielmiao
        17
    danielmiao  
       2017-04-01 13:17:14 +08:00
    不理解这么做的意义。。是吧 mysql 优化器当傻 bi ~~~~了么
    surfire91
        18
    surfire91  
       2017-04-01 13:17:18 +08:00
    @luckyduck 覆盖索引跟楼主说的 SQL 有什么关系,可否明示?
    zioc
        19
    zioc  
    OP
       2017-04-01 14:06:09 +08:00   1
    @surfire91
    @raycloud
    直接 limit 数据量偏移大了会变慢,这个是偏移 ID 主键
    @AnonymousAccout 加 SELECT * FROM 是 MySQL 不允许 Limit IN 在子查询里面
    realpg
        20
    realpg  
    PRO
       2017-04-01 18:51:37 +08:00
    如果不做特殊 CACHE 标记,测试只有第一次有意义……
    satifanie
        21
    satifanie  
       2017-04-02 16:14:38 +08:00
    单看 也看不出来。 不如直接 Explain 一下。看一下 分析的结果就知道了
    luckyduck
        22
    luckyduck  
       2017-04-03 19:17:57 +08:00
    @surfire91 覆盖索引的意思就是指直接通过索引的查询就能获取到数据。例如: select id from table 这个 id 是主键,仅仅通过索引查询就能返回结果, select * from table 这里则需要先查到主键,再通过主键获取剩余字段的值,这也就是为什么前者比后者快。
    panzhc
        23
    panzhc  
       2017-04-05 18:56:26 +08:00
    garodie
        24
    garodie  
       2017-04-17 07:12:27 +08:00 via iPhone
    现代陈世美,良心被狗吃了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1016 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 18:32 PVG 02:32 LAX 10:32 JFK 13:32
    Do have faith in what you're doing.
    ubao msn 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