数据库查询优化问题,有没有老哥懂的?

查看 82|回复 5
作者:cy1027   
SELECT id FROM table_name;--一秒钟出结果,我的表大概三十万数据
select count(id) from table_name;--超过二十秒,没等它跑完
select count() from table_name;--同上
id 是主键,数据库里有很多列,有大量字符串,大概占几个 g 的磁盘。
我比较不理解,为什么只查 id 可以很快,但是对 id 计数就会很慢,如果说 count ()要扫描全表,那 count ( id )不应该只比第一个稍微慢一丢丢么?

count, select, table_name, from

aw2350   
count(*) 忽略 null
count(id) 筛查 id null
cstj0505   
SELECT id FROM table_name 只是查出了一部分,可能就几十条,不是全部查出,你的数据库工具也没有把 30 万 id 都放内存里吧。
select count(id) from table_name 需要全部查出
adoal   
如 #2 所说。
你的 SELECT id 是在哪里运行的,怎样算是“出结果”?
opengps   
id 列自身就是个索引。
回归下实体案例理解下:你那本新华字典,真正内容厚 5cm (全文扫描),但你只看索引(执行 count(id) )只需要 0.5cm
cy1027
OP
  
@adoal
@cstj0505 其实用什么工具查没影响的,我用的是 navicat ,在查询标签里面手打的 sql 语句,连远程数据库查的,直接查 id 本地查到了 40 万(刚刚数据库又增加了一些数据)数据,每个 id 都有,但是无序,我是拖动滚动条看的,右下角会显示“第 1 条”到“第 400000 条”的字样,由于数据库还在更新,现在查 id 大概在 3s 以内,查 count 还是远超 20 秒
您需要登录后才可以回帖 登录 | 立即注册

返回顶部