Discussion:
Klucz głowny w PostgreSQL
(Wiadomość utworzona zbyt dawno temu. Odpowiedź niemożliwa.)
Robert Skassa
2004-05-26 09:35:06 UTC
Permalink
Witam
Proszę was o info dot. klucza głównego na Postgresie.
Czy bardziej wyjdajne jest zakładanie liczbowych klczy,
czy np: varchar(32) -> w nim zapis szesnastkowy.

Dla mnie na logikę lepiej jest autoincrementy na liczbach
ale moze czegos nie wiem? A o Postgresie wiem niewiele jeszcze niestety.

W tej chwili mam baze gdzie jest kilkadziescia tabel polaczonych relacyjnie
i wszystkie klucze sa wlasnie Varchar(32). System ogolnie chodzi wolno i byc
moze jednym malym kamyczkiem tej powolnosci jest wlasnie zastosowanie takigo
sposobu zapisu klucza.

Co o tym sadzicie?
Marcin Gajda
2004-05-26 09:57:18 UTC
Permalink
Post by Robert Skassa
Proszę was o info dot. klucza głównego na Postgresie.
Czy bardziej wyjdajne jest zakładanie liczbowych klczy,
czy np: varchar(32) -> w nim zapis szesnastkowy.
Integery są lepsze. Choćby dlatego, że przy Varchar system musi
sprawdzać długość stringa przy operacjach DML. Porównanie Varchara(32) z
zapisaem szesnastkowym jest też czterokrotnie wolniejsze od porównania
czterobajtowego integera.

Ci więcej - sekwencje operują na integerach.

Tak wogóle - klucze w stringach to zbrodnia.

Pozdrawiam,
--
Marcin Gajda ________________________
Linux registered user #300108 _______
Dieu me pardonnera - c'est son metier
Radoslaw Jocz
2004-05-26 10:07:50 UTC
Permalink
Post by Robert Skassa
Witam
Proszę was o info dot. klucza głównego na Postgresie.
Czy bardziej wyjdajne jest zakładanie liczbowych klczy,
czy np: varchar(32) -> w nim zapis szesnastkowy.
Dla mnie na logikę lepiej jest autoincrementy na liczbach
ale moze czegos nie wiem? A o Postgresie wiem niewiele jeszcze niestety.
na stronie postgresa, sa bardzo dobre dokumantacje zarowno do samego
postgresa jak i sqla

zreszta nawet psql ma w sobie wbudowana dokumentacje sql

a jesli chodzi o autoincrement czyli serial, dokumentacja mowi ze
przy deklaracji takiego pola automatycznie wygenerowana jest sekwencja,
mozna wszystko zrobic recznie.
w dokumentacji jest to omowione.

ponadto w dokumenctacji dodatkowej jest mowa o tuningu postgresql
Post by Robert Skassa
W tej chwili mam baze gdzie jest kilkadziescia tabel polaczonych relacyjnie
i wszystkie klucze sa wlasnie Varchar(32). System ogolnie chodzi wolno i byc
moze jednym malym kamyczkiem tej powolnosci jest wlasnie zastosowanie takigo
sposobu zapisu klucza.
Co o tym sadzicie?
a czy pola kluczy obcych bioracych udzial w zlaczaniu sa poindeksowane?
indeksowanie znacznie przyspiesza dostep do danych nieuporzadkownych.
Filip Sielimowicz
2004-05-26 20:46:41 UTC
Permalink
Post by Robert Skassa
Witam
Proszę was o info dot. klucza głównego na Postgresie.
Czy bardziej wyjdajne jest zakładanie liczbowych klczy,
czy np: varchar(32) -> w nim zapis szesnastkowy.
Dla mnie na logikę lepiej jest autoincrementy na liczbach
ale moze czegos nie wiem? A o Postgresie wiem niewiele jeszcze niestety.
W tej chwili mam baze gdzie jest kilkadziescia tabel polaczonych relacyjnie
i wszystkie klucze sa wlasnie Varchar(32). System ogolnie chodzi wolno i byc
moze jednym malym kamyczkiem tej powolnosci jest wlasnie zastosowanie takigo
sposobu zapisu klucza.
Co o tym sadzicie?
Ja sądzę, że tu nie o te klucze chodzi. Paradoksalnie postgres do wersji 7.4
ze względu na buga może na varcharowytch kluczach chodzić szybciej, niż na
np.
kluczach int8 lub int2 - nie trzeba w zapytaniach dbać o rzutowanie stałych.

Trudno powiedzieć, dlaczego "chodzi wolno" - musiałbyś coś podać konkretnie.
Jakieś zapytania i ich explain analyse.
Jeśli pracowałeś wcześniej na bazach typu Oracle czy mssql (z tych nowszych,
np
Oracle 9i i sql server 2000), to postgres może wydać Ci się wolny, bo w
postgresie
nie ma zmiłuj - jak nie założysz sam donrych indeksów, to postgres nic
dobrego
w ich miejsce nie wymyśli.
Poza tym być może masz słabo ustawione parametry typu shared_buffers.
jaka to wersja postgresa ? 7.3 na linuksie? A może 7.5beta pod windows ?
Parametry defaultowe, czy zmieniane ?
Jak wygląda obciążenie - ilu userów podłączonych, ile transakcji na minute
na usera,
złożoność transakcji (insert/update, czy do tego liczne raporty - avg, sum
itp) ?
Może dużo używacie operatora like ?
Musisz podać coś więcej, bo jak jest kilkadziesiąt tabel, to już nie jest to
taki zupełne malutki system

Filip Sielimowicz
http://panda.bg.univ.gda.pl/~sielim/genetic

Loading...