Thread: Integer keys vs. Varchar keys

Integer keys vs. Varchar keys

From
David Link
Date:
Hi,

What performance gains would an integer primary key have over a varchar
primary key, for table joins?

On a 100,000 record table joining with a 9,000 record table, there
appears to be no difference. Index Scan cost=0.00..4.51 in either case.

Would one expect it to make a difference with a 1,000,000 record table?

Thanks, David

Re: Integer keys vs. Varchar keys

From
Tom Lane
Date:
David Link <dlink@soundscan.com> writes:
> What performance gains would an integer primary key have over a varchar
> primary key, for table joins?

The comparison operation itself would surely be faster for integers, but
that would probably be swamped out by disk access and other overhead.
What I'd expect is that any measurable difference would come from more
I/O required due to physical increase in the table and index sizes,
because of larger field sizes in the varchar case.  Since you didn't say
how long your varchar keys might be, it's anyone's guess what the
differential will be.

> On a 100,000 record table joining with a 9,000 record table, there
> appears to be no difference. Index Scan cost=0.00..4.51 in either case.

Surely you're not foolish enough to believe that EXPLAIN's estimates
should be trusted ;-).  Get out your stopwatch or turn on
print_query_statistics to get some real elapsed-time numbers.

            regards, tom lane

Re: Integer keys vs. Varchar keys

From
David Link
Date:
Tom Lane wrote:
>
> David Link <dlink@soundscan.com> writes:
> > What performance gains would an integer primary key have over a varchar
> > primary key, for table joins?
>
> The comparison operation itself would surely be faster for integers, but
> that would probably be swamped out by disk access and other overhead.
> What I'd expect is that any measurable difference would come from more
> I/O required due to physical increase in the table and index sizes,
> because of larger field sizes in the varchar case.  Since you didn't say
> how long your varchar keys might be, it's anyone's guess what the
> differential will be.

varchar(12).  An alpha numeric UPC code.

Thanks for the information,
David