SELECT 1 的问题

玫_瑰骑_士 2013-10-22 10:09:07
加精
百度一下会出来下面这段话:
1)select 1 from mytable;与select anycol(目的表集合中的任意一行) from mytable;与select * from mytable 作用上来说是没有差别的,都是查看是否有记录,一般是作条件用的。select 1 from 中的1是一常量,查到的所有行的值都是它,但从效率上来说,1>anycol>*,因为不用查字典表。

2)select 1 from table 增加临时列,每行的列值是写在select后的数。

作为新手,让我不理解的是增加临时列居然比select * 效率还高?

...全文
1942 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
524929657雯 2014-01-04
  • 打赏
  • 举报
回复
PaulyJiang 2013-10-28
  • 打赏
  • 举报
回复
SELECT COUNT(1) FROM ** 和 Select Count(*) from ** 呢? 这两个应该是 后者效率高吧?
xiaocongzhi 2013-10-26
  • 打赏
  • 举报
回复
1与*作用不同的。如果你想显示出确切列的值当然要用*
blackkettle 2013-10-25
  • 打赏
  • 举报
回复
关注下。
YHL27 2013-10-25
  • 打赏
  • 举报
回复
测试了 700w 数据量,感觉差别不是很大呢。。。
xiaoxiangqing 2013-10-23
  • 打赏
  • 举报
回复
同意楼主的观点
txzsp 2013-10-23
  • 打赏
  • 举报
回复
这个是个很简单的问题,首先,更正下“anycol(目的表集合中的任意一行)”应该是一列不是一样。 作用上是一样,是指出来的记录条数是一样的,查的过程也是一样的。 显示常量1肯定是最快的,其它还必须去数据表中寻找对应字段的值然后才能显示出来,而常量只要直接显示一下就可以了,肯定是最快的。
mmy_yc 2013-10-23
  • 打赏
  • 举报
回复
Z-人 2013-10-22
  • 打赏
  • 举报
回复
玫_瑰骑_士 2013-10-22
  • 打赏
  • 举报
回复
谢谢大家的帮助,结贴了,虽然分不多~
玫_瑰骑_士 2013-10-22
  • 打赏
  • 举报
回复
引用 14 楼 TravyLee 的回复:
select 1 from sys.tables select * from sys.tables 举个简单的例子 执行上面这两个查询 然后查看两者的执行计划和开销情况 你自己去琢磨吧
谢谢~
玫_瑰骑_士 2013-10-22
  • 打赏
  • 举报
回复
引用 15 楼 Imaor 的回复:
我觉得 exists 语句中就用 select 1 ,减少资源浪费; 如果不是exists,需要各个字段的时候,就直接用 select 字段1,字段2,。。。 养成一个习惯还是比较好的。 一旦用惯了select * ,如果碰到了数据量很大,且字段比较多的表,你直接上手 select * , 呵呵,你慢慢等吧,如果在web中调用了这样的语句,服务器超时都是有可能出现的
谢谢点播~
IEEE_China 2013-10-22
  • 打赏
  • 举报
回复
我觉得 exists 语句中就用 select 1 ,减少资源浪费; 如果不是exists,需要各个字段的时候,就直接用 select 字段1,字段2,。。。 养成一个习惯还是比较好的。 一旦用惯了select * ,如果碰到了数据量很大,且字段比较多的表,你直接上手 select * , 呵呵,你慢慢等吧,如果在web中调用了这样的语句,服务器超时都是有可能出现的
  • 打赏
  • 举报
回复
select 1 from sys.tables select * from sys.tables 举个简单的例子 执行上面这两个查询 然后查看两者的执行计划和开销情况 你自己去琢磨吧
發糞塗牆 2013-10-22
  • 打赏
  • 举报
回复
这样的话,是否可以理解为select 1不需要完全知道表的具体内容, 这句话可以这样理解,不过速度的话我觉得要看你怎么写了,如果select *,1 as '新列' from tb的话,估计和select * from tb是差不多的
玫_瑰骑_士 2013-10-22
  • 打赏
  • 举报
回复
引用 9 楼 fredrickhu 的回复:
[quote=引用 7 楼 huge92 的回复:] [quote=引用 3 楼 DBA_Huangzj 的回复:] 1)select 1 from mytable;与select anycol(目的表集合中的任意一行) from mytable;与select * from mytable 作用上来说是没有差别的,都是查看是否有记录,一般是作条件用的。select 1 from 中的1是一常量,查到的所有行的值都是它,但从效率上来说,1>anycol>*,因为不用查字典表。 从速度上来说1的确快一点,但是你要考虑的是是否你想要的,如果在exists里面,用select 1就够了。 第二个问题没看懂
第二个问题也是资料里的一部分,他说select 1 from table是增加临时列,而每行的列值是写在select后的数[/quote] 就是查询出来的全部是常量1啊 [/quote] 这样的话,是否可以理解为select 1不需要完全知道表的具体内容,因此速度上会快一些?
玫_瑰骑_士 2013-10-22
  • 打赏
  • 举报
回复
引用 10 楼 DBA_Huangzj 的回复:
[quote=引用 7 楼 huge92 的回复:] [quote=引用 3 楼 DBA_Huangzj 的回复:] 1)select 1 from mytable;与select anycol(目的表集合中的任意一行) from mytable;与select * from mytable 作用上来说是没有差别的,都是查看是否有记录,一般是作条件用的。select 1 from 中的1是一常量,查到的所有行的值都是它,但从效率上来说,1>anycol>*,因为不用查字典表。 从速度上来说1的确快一点,但是你要考虑的是是否你想要的,如果在exists里面,用select 1就够了。 第二个问题没看懂
第二个问题也是资料里的一部分,他说select 1 from table是增加临时列,而每行的列值是写在select后的数[/quote]说白了就是临时在结果集上弄个常量。两者的方式不同,一个是查数据,一个是类似与赋值,就好像建房和卖房[/quote] 这样的话,是否可以理解为select 1不需要完全知道表的具体内容,因此速度上会快一些?
發糞塗牆 2013-10-22
  • 打赏
  • 举报
回复
引用 7 楼 huge92 的回复:
[quote=引用 3 楼 DBA_Huangzj 的回复:] 1)select 1 from mytable;与select anycol(目的表集合中的任意一行) from mytable;与select * from mytable 作用上来说是没有差别的,都是查看是否有记录,一般是作条件用的。select 1 from 中的1是一常量,查到的所有行的值都是它,但从效率上来说,1>anycol>*,因为不用查字典表。 从速度上来说1的确快一点,但是你要考虑的是是否你想要的,如果在exists里面,用select 1就够了。 第二个问题没看懂
第二个问题也是资料里的一部分,他说select 1 from table是增加临时列,而每行的列值是写在select后的数[/quote]说白了就是临时在结果集上弄个常量。两者的方式不同,一个是查数据,一个是类似与赋值,就好像建房和卖房
--小F-- 2013-10-22
  • 打赏
  • 举报
回复
引用 7 楼 huge92 的回复:
[quote=引用 3 楼 DBA_Huangzj 的回复:] 1)select 1 from mytable;与select anycol(目的表集合中的任意一行) from mytable;与select * from mytable 作用上来说是没有差别的,都是查看是否有记录,一般是作条件用的。select 1 from 中的1是一常量,查到的所有行的值都是它,但从效率上来说,1>anycol>*,因为不用查字典表。 从速度上来说1的确快一点,但是你要考虑的是是否你想要的,如果在exists里面,用select 1就够了。 第二个问题没看懂
第二个问题也是资料里的一部分,他说select 1 from table是增加临时列,而每行的列值是写在select后的数[/quote] 就是查询出来的全部是常量1啊
發糞塗牆 2013-10-22
  • 打赏
  • 举报
回复
SELECT *是表扫描、索引扫描、聚集索引扫描,都是扫描,表越大越慢,需要加载数据到内存。select 1怎么增加临时列?
加载更多回复(12)

34,594

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧