Ho il seguente semplice tabella che contiene i dati di misurazione del traffico:Molto lento bitmap mucchio scansione in Postgres
CREATE TABLE "TrafficData"
(
"RoadID" character varying NOT NULL,
"DateID" numeric NOT NULL,
"ExactDateTime" timestamp NOT NULL,
"CarsSpeed" numeric NOT NULL,
"CarsCount" numeric NOT NULL
)
CREATE INDEX "RoadDate_Idx" ON "TrafficData" USING btree ("RoadID", "DateID");
La colonna RoadID identifica in modo univoco la strada i cui dati sono in corso di registrazione, mentre DateID identifica il giorno dell'anno (1..365) dei dati - fondamentalmente una rappresentazione arrotondata di ExactDateTime.
Ho circa 100.000.000 di file; ci sono 1.000 valori distinti nella colonna "RoadID" e 365 valori distinti nella colonna "DateID".
ho quindi eseguire la seguente query:
SELECT * FROM "TrafficData"
WHERE "RoadID"='Station_1'
AND "DateID">20100610 AND "DateID"<20100618;
Ciò richiede fino a tre secondi da capogiro per finire, e non posso per la vita di me capire perché.
EXPLAIN ANALYZE mi dà il seguente risultato:
Bitmap Heap Scan on "TrafficData" (cost=104.84..9743.06 rows=2496 width=47) (actual time=35.112..2162.404 rows=2016 loops=1)
Recheck Cond: ((("RoadID")::text = 'Station_1'::text) AND ("DateID" > 20100610::numeric) AND ("DateID" < 20100618::numeric))
-> Bitmap Index Scan on "RoadDate_Idx" (cost=0.00..104.22 rows=2496 width=0) (actual time=1.637..1.637 rows=2016 loops=1)
Index Cond: ((("RoadID")::text = 'Station_1'::text) AND ("DateID" > 20100610::numeric) AND ("DateID" < 20100618::numeric))
Total runtime: 2163.985 ms
mie specifiche:
- di Windows 7
- Postgres 9.0
- 4GB di RAM
mi piacerebbe molto apprezzare qualsiasi pozzo utile TERS!
Questa non è la tabella che si sta utilizzando, non esiste una colonna "StationId". –
Ah, vero; Grazie per la segnalazione. StationID == RoadID. Colpa mia. Ho appena cambiato il nome della colonna nella definizione della tabella per rendere i contenuti più intuitivi, ma non è riuscito a cambiare il nome nella definizione della query e l'output della query. Ho aggiornato la domanda per includere il nome corretto della colonna. – TroutKing
Hai il vuoto in funzione o lo hai disattivato? –