[postgis-users] Request to help on GIS Query improvement suggestion.

postgann2020 s postgann2020 at gmail.com
Fri May 22 05:15:49 PDT 2020


Hi Andreas,

Thanks for the update.

I have created an index as per suggestion. But it seems the query is not
utilizing the index on the column. Is am I missing something?.Is I have to
add expression somethings like..?

*CREATE INDEX cable_pair_parental_path_trgm_idx ON schema.table_name USING
gin (parental_path gin_trgm_ops);*

Explain Plan:
=============

Limit  (cost=108111.60..108111.61 rows=1 width=4) (actual
time=4597.605..4597.605 rows=0 loops=1)
 Output: ((seq_no + 1)), seq_no
 Buffers: shared hit=2967 read=69606 dirtied=1
 ->  Sort  (cost=108111.60..108113.09 rows=595 width=4) (actual
time=4597.603..4597.603 rows=0 loops=1)
       Output: ((seq_no + 1)), seq_no
       Sort Key: TABLE_NAME.seq_no DESC
       Sort Method: quicksort  Memory: 25kB
       Buffers: shared hit=2967 read=69606 dirtied=1
       ->  *Seq Scan on SCHEMA.TABLE_NAME  (cost=0.00..108108.63 rows=595
width=4) (actual time=4597.595..4597.595 rows=0 loops=1)*
             Output: (seq_no + 1), seq_no
             Filter: ((TABLE_NAME.parental_path ~~
'%,sheath--64690,%'::text) OR (TABLE_NAME.parental_path ~~
'sheath--64690,%'::text) OR (TABLE_NAME.parental_path ~~
'%,sheath--64690'::text) OR (TABLE_NAME.parental_path =
'sheath--64690'::text))
             Rows Removed by Filter: 1930188
             Buffers: shared hit=2967 read=69606 dirtied=1

Could you please suggest on this.

Regards,
PostgAnn.



On Fri, May 22, 2020 at 5:43 PM postgann2020 s <postgann2020 at gmail.com>
wrote:

> Hi Andreas,
>
> Thanks for update.
>
> I have created index as per suggestion
>
> On Fri, May 22, 2020 at 4:26 PM Andreas Neumann <a.neumann at carto.net>
> wrote:
>
>> Hi,
>>
>> It seems that this query has nothing to do with the spatial aspect of
>> Postgis. I therefore recommend to look also at PostgreSQL support channels.
>>
>> But in general: queries using LIKE, esp. when the wildcard characters are
>> at the beginning or in between, or worst case at the start and end often
>> can't use an index, exp. btree indexes.
>>
>> Best to avoid LIKE whenever possible and also have a look at pg_trgrm and
>> use a GIST or GIN index.
>>
>> Have a look at
>> https://niallburkley.com/blog/index-columns-for-like-in-postgres/
>>
>> Greetings,
>>
>> Andreas
>>
>> On 2020-05-22 12:45, postgann2020 s wrote:
>>
>>   Hi Team,
>>
>> Thanks for your support.
>>
>> Could someone please suggest on the below query.
>>
>> One of the query which was created on GIS data is taking a long time and
>> even it is not taking the index as well. I have included all the required
>> details for reference.
>>
>> Database Stack:
>> ===============
>> PostgreSQL : 9.5.15
>> Postgis: 2.2.7
>>
>> Table Structure:
>> ===================
>>
>> ALTER TABLE SCHEMA.TABLE_NAME ADD COLUMN parental_path text;
>>
>> Created Indexes on column parental_path:
>> =================================
>>
>> CREATE INDEX cable_pair_parental_path_idx
>>   ON SCHEMA.TABLE_NAME
>>   USING btree
>>   (md5(parental_path) COLLATE pg_catalog."default");
>>
>> CREATE INDEX cable_pair_parental_path_idx_fulltext
>>   ON SCHEMA.TABLE_NAME
>>   USING gist
>>   (parental_path COLLATE pg_catalog."default");
>>
>> Sample data in "parental_path" column:
>> ======================================
>>
>>
>> 'route--2309421/2951584/3373649/2511322/1915187/2696397/2623291/2420708/2144348/2294454,circuit--88458/88460,sheath--8874'
>>
>> Actual Query:
>> =============
>>
>> SELECT seq_no + 1 FROM SCHEMA.TABLE_NAME WHERE (parental_path LIKE
>> '%,sheath--' || cable_seq_id || ',%' OR parental_path LIKE 'sheath--' ||
>> cable_seq_id || ',%' OR parental_path LIKE '%,sheath--' || cable_seq_id OR
>> parental_path = 'sheath--' || cable_seq_id) ORDER BY seq_no DESC LIMIT 1;
>>
>> Explain Plan:
>> =============
>>
>> Limit  (cost=108111.60..108111.61 rows=1 width=4) (actual
>> time=4597.605..4597.605 rows=0 loops=1)
>>  Output: ((seq_no + 1)), seq_no
>>  Buffers: shared hit=2967 read=69606 dirtied=1
>>  ->  Sort  (cost=108111.60..108113.09 rows=595 width=4) (actual
>> time=4597.603..4597.603 rows=0 loops=1)
>>        Output: ((seq_no + 1)), seq_no
>>        Sort Key: TABLE_NAME.seq_no DESC
>>        Sort Method: quicksort  Memory: 25kB
>>        Buffers: shared hit=2967 read=69606 dirtied=1
>>        ->  *Seq Scan on SCHEMA.TABLE_NAME  (cost=0.00..108108.63
>> rows=595 width=4) (actual time=4597.595..4597.595 rows=0 loops=1)*
>>              Output: (seq_no + 1), seq_no
>>              Filter: ((TABLE_NAME.parental_path ~~
>> '%,sheath--64690,%'::text) OR (TABLE_NAME.parental_path ~~
>> 'sheath--64690,%'::text) OR (TABLE_NAME.parental_path ~~
>> '%,sheath--64690'::text) OR (TABLE_NAME.parental_path =
>> 'sheath--64690'::text))
>>              Rows Removed by Filter: 1930188
>>              Buffers: shared hit=2967 read=69606 dirtied=1
>>
>> Please share your suggestion.
>> Thanks & Regards,
>> PostgAnn.
>>
>> _______________________________________________
>> postgis-users mailing list
>> postgis-users at lists.osgeo.org
>> https://lists.osgeo.org/mailman/listinfo/postgis-users
>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/postgis-users/attachments/20200522/c11e07d4/attachment.html>


More information about the postgis-users mailing list