2017-08-21 6 views

答えて

0

count(*)は非常にまれです。

count関数は、NULLでない行を数えます。したがって、count(name)は、たとえばnameフィールドがnullでないレコードをカウントします。カウントされているフィールドが索引付けされていない場合、この結果、全表スキャンが行われます。

count(*)の場合、データベースは、少なくとも1つの非ヌルフィールドを持つレコードをカウントします。つまり、すべてのフィールドがヌルのレコードを除外します。これはあなたの望むものかもしれませんが、ほとんどの人はコンテンツに関係なくすべてのレコードを数えたいときにこのフォームを間違って使います。

データベース固有の構文なしですべてのレコードを数える最も効率的な方法はcount(1)です。これは、値1がすべてのレコードでNULLでなく、データベースからデータを読み取る必要がないために機能します。

1

クエリの内容を知りたい場合は、「説明」プランを参照してください。

問題のクエリを高速化する場合は、table1(pid)にインデックスを作成します。

クエリは、テーブルではなくインデックスをスキャンする必要があります。

関連する問題