我想检查表中是否有任何记录用于某个条目。我使用COUNT(*)
来检查记录的数量并使其工作。但是,当条目的记录数非常高时,我的页面加载速度很慢。
我猜COUNT(*)
导致问题,但如何在不使用记录的情况下检查记录是否存在?我只想检查条目是否存在任何记录,然后执行一些代码。请帮我找到替代解决方案。
感谢您的帮助。
答案 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)如果您说(*)它将展开所有列,然后计数