Zdravim chtěl bych se zeptat zda nahodou někdo nemate zkušenost s range typy.
Jde mi konkretne o case kdy mám v tabulce sloupecky date_from, date_to a přemýšlím zda ma smysl modelovat to jako tsrange.
Řeším otázky jako
a) jak efektivní je uložení skrz zabrané místo na disku
b) jak efektivní je přístup k pouze jedné z hodnot
c) jak efektivní je řazení například podle date_from
d) jak efektivní je indexování GIST na tsrange vs btree na samostatných sloupcích
e) libovolné prakticke zkušenosti
snažil jsem se googlit hledat benchmarky ale příjde mi že na to jak je toto potenciálně zajimavý typ tak je k němu až převapivě málo informací
Děkuji
range typy jsem nepoužil - nicméně na některé otázky znám odpověď. timestamp zabírá 8 bajtů (na 64bit). tsrange je tzv varlena typ, takže může zabírat od 4 bajtů do 1GB. Co jsem se díval, tak zabíral 25 bajtů. Tabulka o 2 timestampech s 1M řádků má 42MB, s tsrange 50MB. Index nad timestampem má 21MB, nad tsrange 39MB.
range type se používal a používá jednak pro zajištění nepřekrývání intervalů, druhak pro dotazy, kde je podmínka typu date_from < x and x < date_to (jestli si to pamatuji správně). Na takových dotazech jsou klasické indexy slabé - před range typy se tyto dotazy převáděly do 2D prostoru a používaly se prostorové indexy. S range typy takové harakiri se dělat nemusí. Před pár lety jsem ovšem dělal nějaké testy a i bez range typů to nějak fungovalo díky bitmap heap scanu - range type by ovšem měly být výrazně lepší.
GiST index je obecnější forma Btree. Chování těchto dvou indexů by mělo být hodně podobné. Nicméně u range (X1, X2) se využívá pro optimalizaci faktu, že X1 je vždy <= X2. To, když použijete 2x timestamp neplatí a vyhledávání, výběr nemůže být tak efektivní.