检查除count(*)以外的数据库表中的记录数

时间:2009-07-24 09:52:27

标签: sql sql-server tsql

我想检查表中是否有任何记录用于某个条目。我使用COUNT(*)来检查记录的数量并使其工作。但是,当条目的记录数非常高时,我的页面加载速度很慢。

我猜COUNT(*)导致问题,但如何在不使用记录的情况下检查记录是否存在?我只想检查条目是否存在任何记录,然后执行一些代码。请帮我找到替代解决方案。

感谢您的帮助。

6 个答案:

答案 0 :(得分:6)

有几种方法可行。您可以使用exists,它允许数据库优化方法以获得答案:

if exists(select * from ...)

您可以使用top 1,以便数据库在找到第一个匹配项后停止:

if (select count(*) from (select top 1 * from ...)) > 0

答案 1 :(得分:3)

使用select top 1并检查是否有行

答案 2 :(得分:3)

您可以尝试选择给定条件的第一个条目。

SELECT id FROM table WHERE <condition> LIMIT 1

我不确定这会更快,但你可以试试。

其他可能的解决方案。你怎么用伯爵? COUNT(*)?如果是,请尝试使用COUNT(id)。我记得这应该更快。

答案 3 :(得分:0)

我建议进行测试,以确定表中是否存在符合条件的至少1条记录,然后相应地继续。例如:

IF EXISTS
(
    SELECT TOP 1 Table_Name --Or Your ColumnName
    FROM INFORMATION_SCHEMA.Tables -- Or your TableName
)
BEGIN
    PRINT 'At least one record exists in table'
END

答案 4 :(得分:0)

我在codeproject上找到了这个。它非常方便。

-- Author,,Md. Marufuzzaman

SELECT SYS_OBJ.NAME AS "TABLE NAME"
     , SYS_INDX.ROWCNT AS "ROW COUNT"
FROM SYSOBJECTS SYS_OBJ, SYSINDEXES SYS_INDX

WHERE SYS_INDX.ID = SYS_OBJ.ID
  AND INDID IN(0,1) --This specifies 'user' databases only
  AND XTYPE = 'U' --This omits the diagrams table of the database
--You may find other system tables will need to be ommitted,
 AND SYS_OBJ.NAME <> 'SYSDIAGRAMS'

ORDER BY SYS_INDX.rowcnt DESC --I found it more useful to display 
--The following line adds up all the rowcount results and places
--the final result into a separate column [below the first resulting table]
COMPUTE SUM(SYS_INDX.ROWCNT) 

GO

答案 5 :(得分:-1)

你应该使用

中选择count(1)

如果您说(*)它将展开所有列,然后计数