Mam starszy schemat (zastrzeżenie!), Który używa wygenerowanego na podstawie skrótu identyfikatora dla klucza podstawowego dla wszystkich tabel (jest ich wiele). Przykładem takiego identyfikatora jest:
922475bb-ad93-43ee-9487-d2671b886479
Nie ma żadnej nadziei na zmianę tego podejścia, jednak wydajność z dostępem do indeksu jest niska. Uchylenie mnóstwo powodów to może być, jest jedna rzecz zauważyłem, że wydawały mniej niż optymalna - mimo wszystkich wartości ID w każdym wielu tabel będących dokładnie 36 znaków, typ kolumna jest varchar(36)
, nie char(36)
.
Czy zmiana typów kolumn na ustaloną długość char(36)
przyniosłaby jakiekolwiek znaczące korzyści w zakresie wydajności indeksu poza bardzo niewielki wzrost liczby wpisów na stronie indeksu itp.?
Czy to znaczy, że postgres działa znacznie szybciej w przypadku typów o stałej długości niż w przypadku typów o zmiennej długości?
Proszę nie wspominać o niewielkich oszczędnościach na przechowywaniu - nie będzie to miało znaczenia w porównaniu z operacją wymaganą do zmiany kolumn.
źródło
char(n)
prawie nigdy nie wygrywa pod żadnym względem. Nie używaj tego. Typy danychtext
ivarchar
(bez modyfikatora długości) są kompatybilne binarnie i mają te same parametry wydajności. Istnieją historyczne powody, dla których oba mogą współistnieć w Postgres. Wewnętrznietext
jest „preferowanym” typem typu ciągu (który może wpływać na rozdzielczość typu funkcji). Cykle procesora wymuszająvarchar(n)
ledwie znaczenie. W razie potrzeby użyj ograniczenia długości . W omawianym przypadkuuuid
prawdziwy zwycięzca.