It's possible to create an index on the transformed data without creating a second table, though it you need to use the same transform often it might be worth creating a second geometry column in the same table.
Postann - you are using LIKE queries - these are rarely fast. I would break that column apart once and for all to allow quick indexed queries on just the part you want. If more data is being added to the table then consider modifying the inserting program or add a trigger to do it on insert. Ian On Fri, 22 May 2020 at 16:25, Vera Green <vera.green...@gmail.com> wrote: > If you are transforming the geom in your query this could be the issue. I > prefer to create views in PG, rather than using GeoServer queries but I > believe it is essentially the same. If I create a PG view where I am > altering the geom, basically any st_ function or aggrigation, this results > in poor performance as a view does not have a spatial index. Because the > geom was altered the spatial index of the parents table doesn't apply to > the view. Therefore, my solution is to create a secondary table (not a > view) with a spatial index. You can use a function to keep the tables in > sync if the source table is altered. > > Vera > > On Fri., May 22, 2020, 4:51 a.m. postgann2020 s, <postgann2...@gmail.com> > 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. >> _______________________________________________ >> Geoserver-users mailing list >> >> Please make sure you read the following two resources before posting to >> this list: >> - Earning your support instead of buying it, but Ian Turton: >> http://www.ianturton.com/talks/foss4g.html#/ >> - The GeoServer user list posting guidelines: >> http://geoserver.org/comm/userlist-guidelines.html >> >> If you want to request a feature or an improvement, also see this: >> https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer >> >> >> Geoserver-users@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/geoserver-users >> > _______________________________________________ > Geoserver-users mailing list > > Please make sure you read the following two resources before posting to > this list: > - Earning your support instead of buying it, but Ian Turton: > http://www.ianturton.com/talks/foss4g.html#/ > - The GeoServer user list posting guidelines: > http://geoserver.org/comm/userlist-guidelines.html > > If you want to request a feature or an improvement, also see this: > https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer > > > Geoserver-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/geoserver-users > -- Ian Turton
_______________________________________________ Geoserver-users mailing list Please make sure you read the following two resources before posting to this list: - Earning your support instead of buying it, but Ian Turton: http://www.ianturton.com/talks/foss4g.html#/ - The GeoServer user list posting guidelines: http://geoserver.org/comm/userlist-guidelines.html If you want to request a feature or an improvement, also see this: https://github.com/geoserver/geoserver/wiki/Successfully-requesting-and-integrating-new-features-and-improvements-in-GeoServer Geoserver-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/geoserver-users