› 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 · Jan 9, 2023 · 8632 views
    This topic created in 1400 days ago, the information mentioned may be changed or developed.

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

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

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