Aktywne Wpisy
DonSizar +60
#gielda k----x czekolada gorzka 80g za 10 ziko. P------o ich tam z tym kakaem. Jeszcze rok temu kupowałem ją za 3 50 zł w biedrze.

źródło: temp_file3986625385344817575
Pobierz
mirko_anonim +7
Treść przeznaczona dla osób powyżej 18 roku życia...
Reszta kolumn nie istotna, bo nie używana w warunkach.
50 milionów unikalnych rekordów z perspektywą na 2 krotny wzrost w ciągu kilku lat, btree index na productnumber
proste pytanie do bazy
select id from x where product_number = $1 order by id dead limit 1
1. W jednym miejscu ktoś przeważnie będzie pytał o numery, które nie istnieją, ale czasem powiedzmy co 10 numer będzie istniał.
2. W drugim miejscu ktoś będzie pytał tylko o istniejące numery w bazie.
W pierwszym przypadku takie pytanie trwa za długo(co najmniej kilka sekund) gdy nie znajdzie rekordu a gdy znajdzie to dużo szybciej.
Jak podejść do tego problemu żeby mieć czas poniżej sekundy gdy szukam nieustającego jeszcze numeru? Postgresql musi i tak skanować całą tabelę.
#programista15k #postgresql #sql
Poprawi performance 1 przypadku i nie zmieni 2
nie na tej samej bazie ale problem taki sam
CREATE TABLE public.x (
id bigserial
CREATE INDEX xbtree ON public.x USING btree (product_number);
i odpal explain jeszcze raz.
Może też jeszcze być tak, że ORDER BY wymusza indeks z PK. Skoro wyciagasz jeden wiersz, to raczej tego ORDER BY nie potrzebujesz.
oprócz twojego pomysłu sprawdziłem jeszcze inne, które przyszły mi do głowy,
potem sprawdzę czy w innych bazach jest
https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-exists/
szkoda, że postgresql nie radzi sobie z tym automatycznie