if exists(select * from table1),如果table1里有5000万条记录,selecct语句只是监测到有1条就返回,还是会把5000万条都select一遍才返回

解决方案 »

  1.   

    exists不返回结果,只进行测试
      

  2.   

    應該是监测到有1条就返回TRUE
      

  3.   

    exists 检测是否存在,返回真假值,检测到一条即是存在的,下面的不会再查了
      

  4.   

    确定吗,exists会控制select的语句的执行细节吗? 加上top 1的语义?
      

  5.   

    if exists(select 1 from table1),
      

  6.   

    if exists(select * from table1) 就可以。
    后面开可以加条件
    if exists(select * from table1 where ******) 
      begin
         .......
      end 
    else
      begin
          ......
      end
      

  7.   

    错。急了。把*换成top 1 *
      

  8.   

    selecct语句只是监测到有1条就返回真
      

  9.   

    SELECT 时会在内容中建立一个锁,在有索引的情况下,该锁会包含一些Filter的页/行,SQL自身的机制决定了其Filter包含第一条记录时则停止执行,这个机制就是Exists实质上就是调用了TOP 1的Filter器.
      

  10.   

    SELECT 时会在内存中建立一个锁,在有索引的情况下,该锁会包含一些行,SQL自身的机制决定了其Filter包含第一条记录时则停止执行,这个机制就是Exists实质上就是调用了TOP 1的Filter.
      

  11.   

    if exists (select 1 from t_5000万)
    Print 1
    if exists (select top 1 1 from t_5000万)
    Print 2你可查看执行计划
      

  12.   

    只要檢測到一閉符合條件的就返回 true 若沒有符合的返回 false  要看符合條件的到哪一筆了 若沒有符合的  還是會掃描全表啊