[postgis-users] Joining two GRID tables, slow query.
adam at spatialsystems.org
adam at spatialsystems.org
Thu Jul 9 14:59:49 PDT 2009
I only have two channel numbers and way more dates than channels. So
I'm guessing my index is fine.
I'm running PostGIS 1.3.3; so I still can't use the geohash as the key?
I figure I'd create a new column called "grid_geohash" as
character_varying(255) and store the grid value there. Is this not
possible in 1.3.3 or am I missing something?
Thanks,
Adam
>-------- Original Message --------
>Subject: Re: [postgis-users] Joining two GRID tables, slow query.
>From: Paul Ramsey <pramsey at cleverelephant.ca>
>Date: Thu, July 09, 2009 4:24 pm
>To: PostGIS Users Discussion <postgis-users at postgis.refractions.net>
>
>Two things.
>
>First, if you have a lot of distinct channels, you'll find multikey
>btree on channel,date is better than date,channel.
>Second, your join key is SnapToGrid() which is to say you're joining
>on an unindexed value. Your best bet might be to pre-calculate the
>grid value into a column, if you have 1.4 you could use the geohash of
>the grid as the key, and then index that column. That will make your
>self-join much faster.
>
>P.
>
>
>On Thu, Jul 9, 2009 at 2:17 PM, <adam at spatialsystems.org> wrote:
>> I'm have a table with 12,604,700 radio frequency measurements in a
>> PostGIS database. Each measurement has with it the date it was taken.
>> I want to compare bin-by-bin how the signal has changed before and after
>> 2009/02/01.
>>
>> The query below is taking a long time and I want to make sure I'm doing
>> it right and there isn't a faster way to do it.
>>
>>
>> Does my SQL have a fundamental flaw or can it be made faster?
>>
>>
>> On the table called "scanner" I have index on:
>>
>> 'channel' type btree
>> 'date,channel' type btree
>> 'geometry' type gist
>>
>> SELECT
>> X(pre_drive_test_data.grid) AS pre_x,
>> Y(pre_drive_test_data.grid) AS pre_y,
>> max(pre_drive_test_data.peak_rx::double precision ) as
>> pre_peak_rx_power,
>> count(pre_drive_test_data.peak_rx) AS pre_count,
>> X(post_drive_test_data.grid) AS post_x,
>> Y(post_drive_test_data.grid) AS post_y,
>> max(post_drive_test_data.peak_rx::double precision ) as
>> post_peak_rx_power,
>> count(post_drive_test_data.peak_rx) AS post_count
>> FROM
>> (
>> SELECT
>> SnapToGrid(scanner.geometry, 0.001213) AS grid,
>> scanner.peak_ec as peak_ec
>> FROM
>> scanner
>> WHERE
>> scanner.channel = 700
>> AND date < '2009-02-01'
>> ) AS pre_drive_test_data,
>> (
>> SELECT
>> SnapToGrid(scanner.geometry, 0.001213) AS grid,
>> scanner.peak_ec as peak_ec
>> FROM
>> scanner
>> WHERE
>> scanner.channel = 700
>> AND date > '2009-02-01'
>> ) AS post_drive_test_data
>> WHERE
>> pre_drive_test_data.grid = post_drive_test_data.grid
>> GROUP BY
>> pre_x,
>> pre_y,
>> post_x,
>> post_y
>>
>>
>> Thanks,
>> Adam
>>
>>
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at postgis.refractions.net
>> http://postgis.refractions.net/mailman/listinfo/postgis-users
>>
>_______________________________________________
>>postgis-users mailing list
>>postgis-users at postgis.refractions.net
>http://postgis.refractions.net/mailman/listinfo/postgis-users
More information about the postgis-users
mailing list