Portál AbcLinuxu, 12. května 2025 17:10
select * from data where id<10000000 and id_device=345 alebo select * from data where id<10000000 and id_device=345 and timestamp>'2017-01-01 10:00:00' and timestamp<'2017-03-01 08:00:00'Ako je prosím najefektívnejšie nadefinovať indexy?
CREATE INDEX idx1 ON data(id, id_device);alebo sólo index pre id (už je autoincrement), sólo pre id_device, sólo pre timestamp? Alebo ich rovno skombinovať ako INDEX idx2 ON data (id, id_device, timestamp)? Vďaka vopred za poradenie, v indexoch nie som doma...
Řešení dotazu:
CREATE INDEX idx1 ON data(id_device, timestamp);protože tyto dva sloupce hrají při selectu zásadní roli.
(id_device, id)
. Pokud má smysl přidávat tam index i pro ten druhý dotaz, přidejte timestamp na jeho konec. Pro první dotaz se pak použije jenom začátek indexu, pro druhý celý index (id_device, id, timestamp)
.
alebo sólo index pre id (už je autoincrement), sólo pre id_device, sólo pre timestamp?To určitě ne. Použil by se jen jeden index s největší selektivností a ty zbývající dva by byly k ničemu. Více indexů najednou by se použilo jen ve velmi specifických případech – pokud se vyplatí vybrat seznam záznamů podle jednoho indexu, vybrat seznam záznamů podle druhého indexu a pak najít společné prvky obou seznamů.
id integer Auto Increment id_device integer [0] timestamp numeric NULL
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.