我们写了可以查询生产数据库的运维小工具,方便排查问题,以前不怎么记得表字段,会用这个来查查记录。一直没啥问题,今天用了这个语句,结果执行了很长时间,然后数据库发出 jvm 告警,想问下,这个 sql 会进行全库扫描吗?我一直以为这个直接读取前 10 行就返回数据了。
我们写了可以查询生产数据库的运维小工具,方便排查问题,以前不怎么记得表字段,会用这个来查查记录。一直没啥问题,今天用了这个语句,结果执行了很长时间,然后数据库发出 jvm 告警,想问下,这个 sql 会进行全库扫描吗?我一直以为这个直接读取前 10 行就返回数据了。
|
ChinsungJan 9, 2023
1
|
|
funboxJan 9, 2023
2
加一个主键排序
|
|
F281M6Dh8DXpD1g2Jan 9, 2023
3
显然不是全表扫描
|
|
r4aAi04Uk2gYWU89Jan 9, 2023
4
type 是 all ,确实是 full table scan 。rows 是查询到满足条件的数据前,大概需要扫描的行数,不是完全精确。
不是说加了索引就一定走索引,在表数据量小的情况下,全表扫描性能可以优于索引。 |
|
5
显然优化器觉得扫全表比主键快。
|
|
idblifeJan 9, 2023
6
可以查询生产数据库的运维小工具
你们 DBA 是不是想弄死你 |
|
bjzhushJan 9, 2023
7
select * from table where id >=1 and id <= 100
id 为主键 这样是最好的 |
|
hhjswfJan 9, 2023 via Android
8
是不是数据量太少,优化器感觉这么搞比较快
|
|
PendingOniJan 9, 2023
9

|
|
wolfieJan 9, 2023
10
这个跟 主键、索引 有关系???
|
|
PendingOniJan 9, 2023
11
|
|
akiraJan 9, 2023
12
那如何避免这种情况再次出现呢? 提前给表一个别名? 或者 sql 做下正则过滤,确保 limit 后面必须有空格?
|
|
13
@akira sql 必须带上 where 可以避免
|
|
14
@idblife 因为每次查数据都要提工单,然后运维部门还没空,一个一下午就能解决的问题,一周都解决不了,所以。。。。
|
|
qeqvJan 9, 2023
15
MySQL 有反引号,习惯使用就不会出错。
``` select * from `t1` limit 10; ``` |
|
idblifeJan 9, 2023
16
|
|
ElmerZhangJan 9, 2023
17
@ruiyinjinqu 不一定都有 where 的需求,总不能都加个 where 1 = 1 ,傻傻的。我的习惯是查多条时都带上 order by id desc 。
|
|
kingpoJan 9, 2023
18
select top 10 * from table_name ,只查前 10 ,也没有查全表吧
|
|
19
………这种关键词一般前后都要加空格的吧
|
|
alwaysdazzJan 10, 2023 via Android
20
查数据的界面没有关键字高亮提示吗
|
|
hdiwhsgJan 10, 2023 via iPhone
21
xswl
|
|
xapluxJan 10, 2023
22
。。。。。。
|
|
wetalkJan 10, 2023
23
啊这这这,缺空格很明显看出来吧。。
|
|
HaoC12Jan 10, 2023
24
awsl
|
|
25
@alwaysdazz 自己在管理台写了个简单页面,没有高亮啥的,对请求返回参数还 rsa 加密了 :(
|
|
xlzyxxnJan 16, 2023
26
2 楼 5 楼说的对
|
|
xlzyxxnJul 26, 2023
27
学习了一下,type 是 ALL 全表扫描,但是是扫了 10 个后就截断了直接返回了。意思就是是全表扫描,但没扫完
|