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

select * from t1 limit 10 会扫描全表

  •  
  •   ruiyinjinqu · 2023-01-09 11:05:57 +08:00 · 7061 次点击
    这是一个创建于 703 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我们写了可以查询生产数据库的运维小工具,方便排查问题,以前不怎么记得表字段,会用这个来查查记录。一直没啥问题,今天用了这个语句,结果执行了很长时间,然后数据库发出 jvm 告警,想问下,这个 sql 会进行全库扫描吗?我一直以为这个直接读取前 10 行就返回数据了。

    第 1 条附言  ·  2023-01-09 13:58:28 +08:00
    破案 了,limit10 中间没空格,当作表的别名,limit 没生效,查询全表了,大意了!!!
    27 条回复    2023-07-26 10:25:41 +08:00
    Chinsung
        1
    Chinsung  
       2023-01-09 11:08:29 +08:00
    funbox
        2
    funbox  
       2023-01-09 11:10:43 +08:00
    加一个主键排序
    liprais
        3
    liprais  
       2023-01-09 11:13:27 +08:00
    显然不是全表扫描
    wtfedc
        4
    wtfedc  
       2023-01-09 11:40:08 +08:00
    type 是 all ,确实是 full table scan 。rows 是查询到满足条件的数据前,大概需要扫描的行数,不是完全精确。
    不是说加了索引就一定走索引,在表数据量小的情况下,全表扫描性能可以优于索引。
    ttwxdly
        5
    ttwxdly  
       2023-01-09 11:56:11 +08:00   ❤️ 2
    显然优化器觉得扫全表比主键快。
    idblife
        6
    idblife  
       2023-01-09 12:37:51 +08:00
    可以查询生产数据库的运维小工具

    你们 DBA 是不是想弄死你
    bjzhush
        7
    bjzhush  
       2023-01-09 12:53:54 +08:00
    select * from table where id >=1 and id <= 100
    id 为主键
    这样是最好的
    hhjswf
        8
    hhjswf  
       2023-01-09 13:00:19 +08:00 via Android
    是不是数据量太少,优化器感觉这么搞比较快
    PendingOni
        9
    PendingOni  
       2023-01-09 13:00:19 +08:00
    ![屏幕截图_20230109_125850.png]( https://s2.loli.net/2023/01/09/8XKaWdpyn3xUODs.png)
    wolfie
        10
    wolfie  
       2023-01-09 13:05:18 +08:00
    这个跟 主键、索引 有关系???
    PendingOni
        11
    PendingOni  
       2023-01-09 13:11:05 +08:00
    akira
        12
    akira  
       2023-01-09 15:35:46 +08:00
    那如何避免这种情况再次出现呢? 提前给表一个别名? 或者 sql 做下正则过滤,确保 limit 后面必须有空格?
    ruiyinjinqu
        13
    ruiyinjinqu  
    OP
       2023-01-09 16:41:07 +08:00
    @akira sql 必须带上 where 可以避免
    ruiyinjinqu
        14
    ruiyinjinqu  
    OP
       2023-01-09 16:44:36 +08:00
    @idblife 因为每次查数据都要提工单,然后运维部门还没空,一个一下午就能解决的问题,一周都解决不了,所以。。。。
    qeqv
        15
    qeqv  
       2023-01-09 17:12:12 +08:00
    MySQL 有反引号,习惯使用就不会出错。
    ```
    select * from `t1` limit 10;
    ```
    idblife
        16
    idblife  
       2023-01-09 17:35:23 +08:00
    @ruiyinjinqu
    在我司这样可能就被开除了
    闹着玩呢。。。
    ElmerZhang
        17
    ElmerZhang  
       2023-01-09 20:33:23 +08:00
    @ruiyinjinqu 不一定都有 where 的需求,总不能都加个 where 1 = 1 ,傻傻的。我的习惯是查多条时都带上 order by id desc 。
    kingpo
        18
    kingpo  
       2023-01-09 23:36:33 +08:00
    select top 10 * from table_name ,只查前 10 ,也没有查全表吧
    netabare
        19
    netabare  
       2023-01-10 00:53:57 +08:00 via Android   ❤️ 1
    ………这种关键词一般前后都要加空格的吧
    alwaysdazz
        20
    alwaysdazz  
       2023-01-10 04:02:47 +08:00 via Android
    查数据的界面没有关键字高亮提示吗
    hdiwhsg
        21
    hdiwhsg  
       2023-01-10 08:42:44 +08:00 via iPhone
    xswl
    xaplux
        22
    xaplux  
       2023-01-10 08:54:34 +08:00
    。。。。。。
    wetalk
        23
    wetalk  
       2023-01-10 09:39:10 +08:00
    啊这这这,缺空格很明显看出来吧。。
    HaoC12
        24
    HaoC12  
       2023-01-10 10:58:54 +08:00
    awsl
    ruiyinjinqu
        25
    ruiyinjinqu  
    OP
       2023-01-10 10:59:13 +08:00
    @alwaysdazz 自己在管理台写了个简单页面,没有高亮啥的,对请求返回参数还 rsa 加密了 :(
    xlzyxxn
        26
    xlzyxxn  
       2023-01-16 14:05:16 +08:00
    2 楼 5 楼说的对
    xlzyxxn
        27
    xlzyxxn  
       2023-07-26 10:25:41 +08:00
    学习了一下,type 是 ALL 全表扫描,但是是扫了 10 个后就截断了直接返回了。意思就是是全表扫描,但没扫完
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2419 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:30 · PVG 23:30 · LAX 07:30 · JFK 10:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.