Обсуждение: Generic design: char vs varchar primary keys

Поиск
Список
Период
Сортировка

Generic design: char vs varchar primary keys

От
"Raj Mathur (राज माथुर)"
Дата:
Hi,

Can you point me to any pages that explain the difference between using, 
say CHAR(8) vs VARCHAR(8) as the primary key for a table?  Is there any 
impact on the database in terms of:

- Speed of indexed retrieval
- Speed of join from a referencing table
- Storage (I presume VARHAR(8) would have a slight edge, in general)
- Any other issue

Regards,

-- Raj
-- 
Raj Mathur                raju@kandalaya.org      http://kandalaya.org/      GPG: 78D4 FC67 367F 40E2 0DD5  0FEF C968
D0EFCC68 D17F
 
PsyTrance & Chill: http://schizoid.in/   ||   It is the mind that moves


Re: Generic design: char vs varchar primary keys

От
Josh Kupershmidt
Дата:
2011/8/3 Raj Mathur (राज माथुर) <raju@linux-delhi.org>:
> Hi,
>
> Can you point me to any pages that explain the difference between using,
> say CHAR(8) vs VARCHAR(8) as the primary key for a table?  Is there any
> impact on the database in terms of:
>
> - Speed of indexed retrieval
> - Speed of join from a referencing table
> - Storage (I presume VARHAR(8) would have a slight edge, in general)
> - Any other issue

The docs have good info about the differences between these types:
http://www.postgresql.org/docs/current/static/datatype-character.html

I suspect the tiny size differences between char(8) and varchar(8) are
going to be negligible. In fact, this post talks precisely about this
concern, and more: http://www.depesz.com/index.php/2010/03/02/charx-vs-varcharx-vs-varchar-vs-text/

Personally I'd be most worried about the different semantics of the
types (i.e. treatment of trailing spaces), and perhaps the ease of
expanding the length constraint in the future.

Josh


Re: Generic design: char vs varchar primary keys

От
"Raj Mathur (राज माथुर)"
Дата:
On Thursday 04 Aug 2011, Josh Kupershmidt wrote:
> 2011/8/3 Raj Mathur (राज माथुर) <raju@linux-delhi.org>:
> > Can you point me to any pages that explain the difference between
> > using, say CHAR(8) vs VARCHAR(8) as the primary key for a table?
> >  Is there any impact on the database in terms of:
> >
> > - Speed of indexed retrieval
> > - Speed of join from a referencing table
> > - Storage (I presume VARHAR(8) would have a slight edge, in
> > general) - Any other issue
> I suspect the tiny size differences between char(8) and varchar(8)
> are going to be negligible. In fact, this post talks precisely about
> this concern, and more:
>
> http://www.depesz.com/index.php/2010/03/02/charx-vs-varcharx-vs-varc
> har-vs-text/
>
> Personally I'd be most worried about the different semantics of the
> types (i.e. treatment of trailing spaces), and perhaps the ease of
> expanding the length constraint in the future.

Thanks, that's useful for benchmarking the various textual data types.
Anything specific about using CHAR vs VARCHAR for primary keys that are
going to be referenced from multiple tables that comes to mind?

Regards,

-- Raj
--
Raj Mathur                raju@kandalaya.org      http://kandalaya.org/      GPG: 78D4 FC67 367F 40E2 0DD5  0FEF C968
D0EFCC68 D17F 
PsyTrance & Chill: http://schizoid.in/   ||   It is the mind that moves


Re: Generic design: char vs varchar primary keys

От
Jasen Betts
Дата:
On 2011-08-03, Raj Mathur (राज माथुर) <raju@linux-delhi.org> wrote:
> Hi,
>
> Can you point me to any pages that explain the difference between using, 
> say CHAR(8) vs VARCHAR(8) as the primary key for a table?  Is there any 
> impact on the database in terms of:

look in the data types chapter of the manual

> - Speed of indexed retrieval
> - Speed of join from a referencing table
> - Storage (I presume VARHAR(8) would have a slight edge, in general)
> - Any other issue

Unless you need the padding, and/or the length constraints use text.

("usr/share/doc/postgresql-doc-8.4/html/datatype-character.html")

.     Tip:  There is no performance difference among these three types,
. apart from increased storage space when using the blank-padded type,
. and a few extra CPU cycles to check the length when storing into a
. length-constrained column. While character(n) has performance
. advantages in some other database systems, there is no such advantage
. in PostgreSQL; in fact character(n) is usually the slowest of the
. three because of its additional storage costs. In most situations text
. or character varying should be used instead. 

-- 
⚂⚃ 100% natural



Re: Generic design: char vs varchar primary keys

От
Jasen Betts
Дата:
On 2011-08-04, Raj Mathur (राज माथुर) <raju@linux-delhi.org> wrote:

> Thanks, that's useful for benchmarking the various textual data types.  
> Anything specific about using CHAR vs VARCHAR for primary keys that are 
> going to be referenced from multiple tables that comes to mind?

that page he pointed you to says they are all stored the same.
(excepte char(8) is padded and that may bloat the index a bit)

-- 
⚂⚃ 100% natural