Files
speckle-server/test-queries/closure-simple-slow.sql
T
Dimitrie Stefanescu 85cc525663 feat(queries): figuring out the perfect querie for getting objects
quite a few things are being considered, perf. wise: pagination, ordering, querying, depth.
2020-05-04 16:25:37 +01:00

20 lines
929 B
SQL

-- SLOW, because?
-- because we were ordering it by the serial_id!
-- sorting by the id (on which we actually do the join) is 10x faster.
-- nice, to say the least.
SELECT child as id, "data" FROM object_children_closure
RIGHT JOIN objects ON objects.id = child
WHERE parent = '509cb0c19594b731214d3ffed2c011df'
-- minDepth is a way to limit asking for objects up to a specific nested depth.
-- this is useful, for example, when we want to get a stream's top level objects only.
-- AND "minDepth" < 1000
-- better pagination routine:
-- instead of using offset, we use the last item we "saw" as where clause (last seen id)
-- this assumes that we are ordering results by their id.
-- if we would be ordering them by something else, this clause would need to change.
-- AND id > '5a29a1e000d94d8b9f4c6dd767235903'
-- AND (objects."data" -> 'sortValueA')::numeric <= 700
ORDER BY id
-- ORDER BY serial_id
OFFSET 0
LIMIT 200