How to COUNT rows within EntityFramework without loading contents?

后端 未结 7 1347
一个人的身影
一个人的身影 2020-11-29 17:56

I\'m trying to determine how to count the matching rows on a table using the EntityFramework.

The problem is that each row might have many

7条回答
  •  暖寄归人
    2020-11-29 18:40

    Well, even the SELECT COUNT(*) FROM Table will be fairly inefficient, especially on large tables, since SQL Server really can't do anything but do a full table scan (clustered index scan).

    Sometimes, it's good enough to know an approximate number of rows from the database, and in such a case, a statement like this might suffice:

    SELECT 
        SUM(used_page_count) * 8 AS SizeKB,
        SUM(row_count) AS [RowCount], 
        OBJECT_NAME(OBJECT_ID) AS TableName
    FROM 
        sys.dm_db_partition_stats
    WHERE 
        OBJECT_ID = OBJECT_ID('YourTableNameHere')
        AND (index_id = 0 OR index_id = 1)
    GROUP BY 
        OBJECT_ID
    

    This will inspect the dynamic management view and extract the number of rows and the table size from it, given a specific table. It does so by summing up the entries for the heap (index_id = 0) or the clustered index (index_id = 1).

    It's quick, it's easy to use, but it's not guaranteed to be 100% accurate or up to date. But in many cases, this is "good enough" (and put much less burden on the server).

    Maybe that would work for you, too? Of course, to use it in EF, you'd have to wrap this up in a stored proc or use a straight "Execute SQL query" call.

    Marc

提交回复
热议问题