node.js - 如何优化 postgresql 查询?
问题描述
我将 node js 与 postgresql 一起使用,并且我试图在每个对话中获取用户的最后一条消息。所以我从 3 个查询中获取数据,然后将它们相加并将它们存储在一个数组中,以便我可以返回它。此代码可以正常工作,但有时它会很好地返回数据,有时会丢失一些数据。
我认为问题在于代码执行时间太长,因此没有足够的时间返回所有数据。所以我想知道是否有另一种方法或 postgresql 函数可以用来优化这段代码。
router.get("/api/messagesUser", verifToken, (req, res) => {
pool.query(
"SELECT * from public.discussion AS D where D.user = $1",
[req.user.id],
(err, result) => {
if (err)
return res
.status(400)
.send({ message: "une erreur s'est produite, veuillez réessayer." });
else if (result.rowCount > 0) {
const arr = [];
result.rows.map(async (val, index) => {
await pool.query(
`SELECT * from public.boutique AS B, public."page_layout" AS P
WHERE B.id = P."id_boutique"
AND B.id = $1`,
[val.boutique],
async (err, result2) => {
if (err)
return res.status(400).send({
message: "une erreur s'est produite, veuillez réessayer.",
});
else if (result2.rowCount > 0) {
await pool.query(
`SELECT contenu, sender, date from public.messages
WHERE id_discussion = $1
ORDER BY date DESC
LIMIT 1`,
[val.id],
async (err, result3) => {
if (err)
return res.status(400).send({
message:
"une erreur s'est produite, veuillez réessayer.",
});
else if (result3.rowCount > 0) {
const data = result2.rows[0];
data["message"] = result3.rows[0].contenu;
data["id_discussion"] = val.id;
data["date"] = result3.rows[0].date;
result3.rows[0].sender == req.user.id
? (data["lastSender"] = "user")
: (data["lastSender"] = "boutique");
await arr.push(result2.rows[0]);
if (index == result.rowCount - 1)
return res.status(200).send(arr);
} else if (index == result.rowCount - 1)
return res.status(200).send(arr);
}
);
}
}
);
});
} else {
res.status(200).send([]);
}
}
);
});
解决方案
推荐阅读
- python - 给定每个簇的质心值,如何为其他点分配数值?
- java - 如何对一张水平大图android分页?
- r - 按行和列合并多个数据框
- postgresql - 如何在 postgreSQL 中将 oracle 转换为_single_byte()
- javascript - Blogger JavaScript 代码有问题
- html - 引导导航栏未折叠(移动)
- reactjs - 如何更改亮度并覆盖浏览器的亮度设置
反应成分 - python - 如何将我的 Shapely 多边形转换为代表(掩码数组)的 numpy 像素数组?Python
- javascript - JavaScript 切换 - 显示一些,并删除一些文本
- maven - 根据编译或提供的 maven 依赖范围产生 Ambiguous Bean 或 ClassNotfoundException