全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 1250|回复: 16

SQL大神给解释下。

[复制链接]
发表于 2019-6-25 09:53:19 | 显示全部楼层 |阅读模式
select (select count(*) from users)  from users where id <= 1;

select count(*) from users

结果一样但是 上面比 下面快  上面这句实质意义是?
发表于 2019-6-25 10:04:08 | 显示全部楼层
如果mysql里最好不要这么样写,
这样最快:select count(1) from users;
 楼主| 发表于 2019-6-25 10:09:53 | 显示全部楼层
ApkB 发表于 2019-6-25 10:04
如果mysql里最好不要这么样写,
这样最快:select count(1) from users;

上面这句 实质性意义是什么?
发表于 2019-6-25 10:12:16 | 显示全部楼层
id <= 1 ,这是个条件啊,不知道你的数据库 id <= 1有些啥,但明显第一个找出来的数据会比第二个少啊。

id > 1的都排除了。
发表于 2019-6-25 10:12:48 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2019-6-25 10:14:09 | 显示全部楼层
没有第一行那么写的,没什么讨论价值。
你到底要查询什么?如何要查询users的count,就按照你第二行那些写就可以了。
二楼的"最快"说法是错误,count(1)和count(*)没什么区别,但推荐用count(*)
发表于 2019-6-25 10:24:57 | 显示全部楼层
liutianshu77 发表于 2019-6-25 10:14
没有第一行那么写的,没什么讨论价值。
你到底要查询什么?如何要查询users的count,就按照你第二行那些写 ...

用过Navicat你就不会这样说了

点评

这话是《高性能MySQL》作者说的  发表于 2019-6-25 10:57
发表于 2019-6-25 10:37:14 | 显示全部楼层
count(*) 不会用到索引,优化的时候建议去掉,用有索引的字段。另外第一句的意义是?
发表于 2019-6-25 11:35:36 | 显示全部楼层
这两句 不都是统计 users 表里面有多少个 用户吗???
发表于 2019-6-25 11:43:38 | 显示全部楼层
jasminnoir 发表于 2019-6-25 10:37
count(*) 不会用到索引,优化的时候建议去掉,用有索引的字段。另外第一句的意义是? ...

【强制】不要使用count(列名)或count(常量)来替代count(*),count(*)是SQL92定义的 标准统计行数的语法,跟数据库无关,跟 NULL 和非 NULL 无关。
说明:count(*)会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-4-19 07:51 , Processed in 0.065035 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表