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
deasty
V2EX  ›  MySQL

大家帮我估算一下这个查询所需要的时间

  •  
  •   deasty · 2019-02-22 23:46:18 +08:00 via iPhone · 4053 次点击
    这是一个创建于 2128 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一个大表,8 个字段,1400 万行,没有索引,打算执行下面的查询
    select * from tab1 where userid in(select userid from tab1 where mm = 6)
    已知 mm = 6 的 userid 有 18000 个
    求估算输出结果大概需要多少时间
    12 条回复    2019-02-24 11:14:46 +08:00
    feiyuanqiu
        1
    feiyuanqiu  
       2019-02-22 23:51:14 +08:00 via Android
    explain 一下
    ppyax
        2
    ppyax  
       2019-02-23 00:12:15 +08:00 via Android
    in 不能超 1000
    1762628386
        3
    1762628386  
       2019-02-23 00:16:23 +08:00
    @ppyax 为啥
    Leigg
        4
    Leigg  
       2019-02-23 00:28:42 +08:00 via iPhone
    分钟级别至少的吧
    lynskylate
        5
    lynskylate  
       2019-02-23 00:31:26 +08:00 via Android
    in 是 n^2 的,写这种 sql review 的时候都会被打回去的
    binux
        6
    binux  
       2019-02-23 04:41:39 +08:00 via Android
    你干嘛不 select * from tab1 where mm = 6
    deasty
        7
    deasty  
    OP
       2019-02-23 08:37:01 +08:00 via iPhone
    @binux 因为需要查询 mm = 6 的用户历史数据,表中存在同一个用户 mm = 5 和 mm = 6 的不同情况,需要都查询出来
    opengps
        8
    opengps  
       2019-02-23 09:28:53 +08:00
    没有索引,那么时间至少是全表大小硬盘读出的时间,再加上运算所需要的时间。先忽略运算部分,光读出部分就很耗时间了
    leonme
        9
    leonme  
       2019-02-23 10:15:14 +08:00 via Android
    @lynskylate 如何优化呢?
    lynskylate
        10
    lynskylate  
       2019-02-23 17:17:56 +08:00 via Android
    @leonme 通常用 join 代替 in, join 字段加索引,这个时间复杂度通常来说是 o n 的
    winoros
        11
    winoros  
       2019-02-24 01:47:43 +08:00
    那么为什么不加索引呢
    luozic
        12
    luozic  
       2019-02-24 11:14:46 +08:00
    为啥不用索引? 这种多的,要么搞个专门查询的 es 什么的,要么出钱。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2259 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 16:09 · PVG 00:09 · LAX 08:09 · JFK 11:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.