2009-07-24 14 views
0

テーブルに特定のエントリのレコードがあるかどうかチェックしたい。私はCOUNT(*)を使ってレコードの数を確認し、それを動作させました。ただし、エントリのレコード数が非常に多い場合、ページの読み込みが遅くなります。count(*)以外のデータベーステーブルのレコード数を調べる

私はCOUNT(*)が問題の原因だと思いますが、レコードを使用せずにレコードが存在するかどうかを確認するにはどうすればよいですか?エントリのレコードが存在するかどうかを確認してから、コードを実行したいだけです。これに代わる解決策を見つけるのを手伝ってください。

ありがとうございました。

+2

しようとしているSQLを投稿できますか?おそらくCountではありませんが、問題の原因となるジョインやインデックスの可能性が高くなります。 –

+0

あなたの結合をチェックしてください。私はいつもそれを使いました。カウント(*)の代わりにSUM(あなたの[条件] THEN 1 ELSE 0 ENDの場合)ですが、カウントは速くなければなりません。 – RandomUs1r

答えて

3

使用トップ1を選択し、チェックはあなたが与えられた条件のための最初のエントリを選択してみてくださいすることができます行

+0

素晴らしい感謝.. !!! – ajithmanmu

3

があります。

SELECT id FROM table WHERE <condition> LIMIT 1 

これは速くなるかどうかはわかりませんが、試すことはできますか。

他の可能な解決策。どのようにカウントを使用しますか? COUNT(*)?はいの場合はCOUNT(id)を試してみてください。これはもっと速くなければならないことを覚えています。

+1

count(id)を使用すると実際にcount(*)よりも遅くなる可能性があり、同じ動作をしません。 count(*)を使用すると行数が得られますが、count(id)はidのnull以外の値の数を返します。したがって、各行の値をチェックする必要があります。 – Guffa

+0

私は 'id'はNULLにできない主キーだと考えました。しかし、それ以外の場合、あなたは完全に正しいです。 – czuk

+0

@Guffa: 'id'がプライマリまたはユニークキーであればいいですが、それはヌルであってはいけないからです。私はSQLの実装がこれを理解するのに十分スマートであると仮定します。 – DisgruntledGoat

6

いくつかの方法があります。

if exists(select * from ...) 

データベースは、最初の一致を検出した後に停止することができるようにあなたがトップ1を使用することができます:

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

あなたがすべきは、データベースが答えを得るための方法を最適化することができますされ、存在して使用することができますあなたはそれがすべての列のを展開し

をカウントします(*)と言っている場合

から

SELECT COUNT(1)を使用します

+0

Oracleでは確かに真実ではありません。 – Randy

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 
+0

IF EXISTS内のトップ1は必要ありません。 IF EXISTSは、最初の行を見つけたときにはかなり役に立ちます。 –

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 
+0

これは、テーブル内に行が存在するかどうかを知ることができますが、特定のEntryID値などの行があるかどうかは判断できません。 –

関連する問題