呵呵,你建个100个字段,100万 行的表, 然后对每个 select * from 你的表 select 1 from 你的表执行计划,看看
1)select 1 from mytable;与select anycol(目的表集合中的任意一行) from mytable;与select * from mytable 作用上来说是没有差别的,都是查看是否有记录,一般是作条件用的。select 1 from 中的1是一常量,查到的所有行的值都是它,但从效率上来说,1>anycol>*,因为不用查字典表。 从速度上来说1的确快一点,但是你要考虑的是是否你想要的,如果在exists里面,用select 1就够了。 第二个问题没看懂
你select * 和select 1from 同一张表试试就知道了。如果用到像if exists(select...)推荐使用select top 1 1
然后对每个 select * from 你的表 select 1 from 你的表执行计划,看看
从速度上来说1的确快一点,但是你要考虑的是是否你想要的,如果在exists里面,用select 1就够了。
第二个问题没看懂
背后的原因是什么类?百度出来的资料上说:因为不用查字典表。
是不是可以理解成:
SELECT * 是要具体知道每一行是什么内容;
SELECT 1不需要具体知道,而是增加临时列,填充的内容都是1?
TOP 1 1?500W数据我测试过 一样的效率
这样的话,是否可以理解为select 1不需要完全知道表的具体内容,因此速度上会快一些?
这样的话,是否可以理解为select 1不需要完全知道表的具体内容,因此速度上会快一些?
这句话可以这样理解,不过速度的话我觉得要看你怎么写了,如果select *,1 as '新列' from tb的话,估计和select * from tb是差不多的
select * from sys.tables举个简单的例子
执行上面这两个查询 然后查看两者的执行计划和开销情况 你自己去琢磨吧
如果不是exists,需要各个字段的时候,就直接用 select 字段1,字段2,养成一个习惯还是比较好的。一旦用惯了select * ,如果碰到了数据量很大,且字段比较多的表,你直接上手 select * ,
呵呵,你慢慢等吧,如果在web中调用了这样的语句,服务器超时都是有可能出现的
作用上是一样,是指出来的记录条数是一样的,查的过程也是一样的。
显示常量1肯定是最快的,其它还必须去数据表中寻找对应字段的值然后才能显示出来,而常量只要直接显示一下就可以了,肯定是最快的。
这两个应该是 后者效率高吧?