我们有树层次结构的表:
id, path
1, "/1/"
2, "/1/2/"
3, "/1/2/3/"
4, "/1/2/3/4/"
5, "/1/5/"
6, "/1/5/6/"
id - int, path - string.
表中没有父级和深度的任何参考。
那么问题,如何让孩子和父母为任何元素?当前解决方案看起来像SELECT * FROM table WHERE ((path LIKE '/1/2/' || '%') OR ('/1/2/' LIKE path || '%'));
。它很慢,可以通过PostgreSQL索引进行优化(查询的第二部分,第一部分由GIN索引优化)。
我尝试使用inner join
,但它比当前解决方案慢。
答案 0 :(得分:0)
如果您坚持使用您的设计,可以将其重写为:
SELECT *
FROM table
WHERE path LIKE '/1/2/' || '%'
UNION ALL
SELECT *
FROM table
WHERE '/1/2/' LIKE path || '%';
在path
添加索引。
CREATE INDEX index_name ON table(path);