optimization of recursive CTE attribute query

This commit is contained in:
zadam 2019-12-01 13:29:39 +01:00
parent 8c3e2e5eb7
commit 35cd7f3261
3 changed files with 9 additions and 10 deletions

View file

@ -349,11 +349,10 @@ class Note extends Entity {
tree(noteId, level) AS (
SELECT ?, 0
UNION
SELECT branches.parentNoteId, tree.level + 1 FROM branches
JOIN tree ON branches.noteId = tree.noteId
JOIN notes ON notes.noteId = branches.parentNoteId
WHERE notes.isDeleted = 0
AND branches.isDeleted = 0
SELECT branches.noteId, tree.level + 1
FROM branches
JOIN tree ON branches.parentNoteId = tree.noteId
WHERE branches.isDeleted = 0
),
treeWithAttrs(noteId, level) AS (
SELECT * FROM tree

View file

@ -112,15 +112,15 @@ async function eraseNoteRevision(req) {
}
async function getEditedNotesOnDate(req) {
const date = req.params.date;
const date = utils.sanitizeSql(req.params.date);
const notes = await repository.getEntities(`
select distinct notes.*
from notes
left join note_revisions using (noteId)
where substr(notes.dateCreated, 0, 11) = ?
or substr(notes.dateModified, 0, 11) = ?
or substr(note_revisions.dateLastEdited, 0, 11) = ?`, [date, date, date]);
where notes.dateCreated LIKE '${date}%'
OR notes.dateModified LIKE '${date}%'
OR note_revisions.dateLastEdited LIKE '${date}%'`);
for (const note of notes) {
const notePath = noteCacheService.getNotePath(note.noteId);

View file

@ -161,7 +161,7 @@ async function wrap(func, query) {
const result = await func(dbConnection);
const milliseconds = Date.now() - startTimestamp;
if (milliseconds >= 200) {
if (milliseconds >= 300) {
if (query.includes("WITH RECURSIVE")) {
log.info(`Slow recursive query took ${milliseconds}ms.`);
}