none
count(*)函数难题? RRS feed

  • 问题

  • 程序中需要使用count(*)来检索表,但是速度很慢,可以自己新建函数来获得count(*)同样的结果,
    如:
    create function dbo.row_count (@table_name sysname)
    -- @table_name we want to get count
    returns bigint
    as
    begin
    declare @nn bigint -- number of rows
    if @table_name is not null
    begin
    select @nn = sum( p.rows )
    from sys.partitions p
    left join sys.allocation_units a on p.partition_id = a.container_id
    where
    p.index_id in(0,1)
    and p.rows is not null
    and a.type = 1
    and p.object_id = object_id(@table_name)
    end
    return (@nn)
    end
    go
    函数速度蛮快,
    但是要实现如:select count(*) from t1 where st<10000这样的功能,有什么办法嘛?
    2010年3月3日 9:04

答案

  • SELECT COUNT(*) FROM t1 a
    Inner Join t2 b
    on a.id = b.tid
    go

    由于t1表数据达到几百万条,
    这里的count(*)有什么方法替代或别的写法,提高性能?

    沒有直接得出結果的方法,把整個語句作為一個參照傳參

    只有在對應的表上建上索引,提高效能
    ROY WU(吳熹)
    • 已标记为答案 ocp_yang 2010年3月4日 14:46
    2010年3月3日 10:16
    版主

全部回复