on 2009 Nov 17 11:37 AM
Structure of Example table:
Id, Integer (PK)
Name, Varchar(100)
Description, Text
I need to know if exists difference in performance between:
SELECT COUNT(*) FROM Example;
and
SELECT COUNT(Id) FROM Example;
Or does not exists differences?
Request clarification before answering.
My vote: no diff!
In old database servers, count(Id) or count(1) was faster than count(*).
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
In version 10.0 and above, COUNT( x )
is translated to COUNT(*)
if x is an expression that is known to not allow NULL. In your example, I think you have Id as a primary key (non-NULL), and therefore COUNT(Id)
is treated identically to COUNT(*) unless your Example table appears on the NULL-supplying side of an outer join.
For expressions Y
that might be NULL
, there are at least three ways that COUNT(Y)
may be slower than COUNT(*)
:
Y
needs to be computed. This means it must be fetched from the table if it is a column; if it is a more complex expression, it needs to be evaluated to determine if it is NULL. If the COUNT(Y)
appears above a work table, the server may need to materialize Y in the work table so that it would be available at the group-by node.COUNT(Y1)
and COUNT(Y2)
for different expressions, and materialized views can not be used unless they have an appropriate COUNT(Y)
that matches the query.Y
. This also means that index-only retrieval is not possible if Y can not be recovered from the index.I do not know of any reason why COUNT(Y)
might be faster than COUNT(*)
. So, use COUNT(*)
if you want to count rows, and COUNT(Y)
if you really need to distinguish how many rows had a NULL value for Y.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
If the exact value is not important, but you just want to get an idea if 1000 or 1Mio entries exists you can use the super fast access to the column count of systab. This value is updated during each successful checkpoint.
select count from systab where table_name = 'Example'
Use case is for instance: The application wants to display total count of customers in the database in its status bar, updated every 5min...
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
82 | |
29 | |
9 | |
8 | |
7 | |
7 | |
7 | |
6 | |
6 | |
5 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.