我想应该是
if exists(select top 1 id from tablename1) ...
快吧。用if exists(select top 1 1 from tablename1) ...就可以。

解决方案 »

  1.   

    你可以做个实验塞?
    select count(*)
      

  2.   

    select * from tablename1 where 1=2这个最快!
      

  3.   

    用exists 比 count(*) 快
    這是不爭的事實.因為exists 只要找到有符合條件的記錄, 就會停止查找,而count(*)速度則會與表記錄關系很大.
      

  4.   


    if exists(select 1 from tablename1) ...没必要什么top 几,也没必要选哪个字段。
      

  5.   

    用 if exixts(select top 1 id from tablename )...
    快多了
      

  6.   

    当你的表中记录数目没有上千万条,那么
    两条语句的速度相差不大。但是当表中的记录有千万到亿,那么速度就exists快多了,基本上还是保持在0s。EXISTS:
    DECLARE @StartDate datetime, @EndDate datetime
    SET @StartDate = getdate()
    IF EXISTS(select 1 from sysobjects a,sysobjects b,sysobjects c,sysobjects d,sysobjects e,sysobjects f) 
    PRINT 'end'SET @EndDate = getdate()SELECT datediff(ms,@StartDate, @EndDate) AS 'Milliseconds'/*
    Milliseconds 
    ------------ 
    0
    */COUNT(*):
    DECLARE @StartDate datetime, @EndDate datetime
    SET @StartDate = getdate()if (select count(*) from sysobjects a,sysobjects b,sysobjects c,sysobjects d)>0
    PRINT 'end'SET @EndDate = getdate()SELECT datediff(ms,@StartDate, @EndDate) AS 'Milliseconds'/*
    Milliseconds 
    ------------ 
    420(所影响的行数为 1 行)
    */
      

  7.   

    刚才测试,还顺便测试了sum(1)与count(*),count(1)的速度对比,结果是/****sum(1)****/
    DECLARE @StartDate datetime, @EndDate datetime
    SET @StartDate = getdate()if (select sum(1) from sysobjects a,sysobjects b,sysobjects c,sysobjects d)>0
    PRINT 'end'SET @EndDate = getdate()SELECT datediff(ms,@StartDate, @EndDate) AS 'Milliseconds'/*
    Milliseconds 
    ------------ 
    910(所影响的行数为 1 行)
    *//****count(1)****/
    DECLARE @StartDate datetime, @EndDate datetime
    SET @StartDate = getdate()if (select count(1) from sysobjects a,sysobjects b,sysobjects c,sysobjects d)>0
    PRINT 'end'SET @EndDate = getdate()SELECT datediff(ms,@StartDate, @EndDate) AS 'Milliseconds'/*
    Milliseconds 
    ------------ 
    390(所影响的行数为 1 行)
    *//****count(*)****/DECLARE @StartDate datetime, @EndDate datetime
    SET @StartDate = getdate()if (select count(*) from sysobjects a,sysobjects b,sysobjects c,sysobjects d)>0
    PRINT 'end'SET @EndDate = getdate()SELECT datediff(ms,@StartDate, @EndDate) AS 'Milliseconds'/*
    Milliseconds 
    ------------ 
    390(所影响的行数为 1 行)
    */经过表明 count(1)与count(*)的速度几乎是相等的,为了与其他数据库的写法兼容,还是用*的为好,但是都比sum(1)的速度要快。
      

  8.   

    大数据量吗?
    推荐count(1)