sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL-afstemmingsinterval tussen start- en eindtijd tegen tijdstempel

Er was "temporal postgres" (google het) maar ik weet niet of het nog steeds wordt onderhouden... Ik geloof dat er een discussie was over het opnemen van dit type zoekopdracht in postgres, maar ik herinner me de uiteindelijke status ervan niet. Hoe dan ook :

Voorbeeld met box en gist :

CREATE TABLE segments( start INTEGER NOT NULL, stop INTEGER NOT NULL, range_box BOX NOT NULL );
INSERT INTO segments SELECT n,n+1,BOX(POINT(n,-1),POINT(n+1,1)) FROM generate_series( 1, 1000000 ) n;
CREATE INDEX segments_box ON segments USING gist( range_box );
CREATE INDEX segments_start ON segments(start);
CREATE INDEX segments_stop ON segments(stop);

EXPLAIN ANALYZE SELECT * FROM segments WHERE 300000 BETWEEN start AND stop;
 Index Scan using segments_start on segments  (cost=0.00..12959.24 rows=209597 width=72) (actual time=91.990..91.990 rows=2 loops=1)
   Index Cond: (300000 >= start)
   Filter: (300000 <= stop)
 Total runtime: 92.023 ms

EXPLAIN ANALYZE SELECT * FROM segments WHERE range_box && '(300000,0,300000,0)'::BOX;
 Bitmap Heap Scan on segments  (cost=283.49..9740.27 rows=5000 width=72) (actual time=0.036..0.037 rows=2 loops=1)
   Recheck Cond: (range_box && '(300000,0),(300000,0)'::box)
   ->  Bitmap Index Scan on segments_box  (cost=0.00..282.24 rows=5000 width=0) (actual time=0.032..0.032 rows=2 loops=1)
         Index Cond: (range_box && '(300000,0),(300000,0)'::box)
 Total runtime: 0.064 ms

Zoals je kunt zien is de gist-index hier belachelijk snel (1500 keer! lol) (en je kunt veel operators gebruiken zoals overlappingen, is ingesloten, bevat, enz.

http://www.postgresql.org/docs/8.2/static/functions-geometry.html



  1. Geneste Loop Join in Oracle 11g

  2. Kunnen we meerdere WITH AS hebben in één sql - Oracle SQL?

  3. Invoegen indien niet bestaat Oracle

  4. Hoe MySQL-database te verbinden met PHP-website