node.js - 动态准备好的语句有意义吗?
问题描述
我想创建动态准备语句,每个部分都是动态的,值、表和 WHERE 部分。
我使用 nodejs + PostgreSQL 和 pg 模块与 PostgreSQL 对话。pg 模块提供了一种不同的语法来配合 node.js ,但我想原理是一样的。这是基于此处的官方示例
//dynamic that can change
let select = 'name , email, age';
let table = 'user';
let where = 'id=$1 AND gender=$2';
let values = [1,'female'];
//prepare
const query = {
// give the query a unique name
name: 'fetch-user',
text: 'SELECT' + select + 'FROM' + table + 'WHERE' + where,
values: values
}
//execute
client.query(query)
.then(res => console.log(res.rows[0]))
.catch(e => console.error(e.stack))
我想知道这是否有意义,性能方面。
我修改了文档,我的理解是,通过使准备好的声明的所有部分都动态化,那么计划可能不会那么有效,或者根本没有效果。
我应该怎么办?我应该保留这种动态语法吗?或者它没有任何意义,所以我必须创建多个准备好的语句并将它们用于不同的表?
谢谢
解决方案
这里应该没有性能问题。SQL 的“动态”部分只是传递给查询对象的字符串,因此唯一要考虑的性能是解析 text 属性。您正在向数据库传递一个完全准备好的语句;是 nodejs 正在解析不同的变量以提供查询对象的 text 属性。
推荐阅读
- awk - 使用带有变量返回值 0 的 awk -F
- square - 如何从 Square API 获取最近的销售额?
- mxgraph - mxGraph:当我删除所有单元格时,布局管理器停止工作
- java - 将 AsyncTask 重置为多次执行
- angular - 为什么订阅函数中的代码会执行多次
- html - 当 flex-direction 设置为 column 时,如何使用 flexbox 将元素与 div 的底部对齐
- angular - ngx-translate 刷新页面后切换到默认语言
- django - 为 django 建模 ER 图
- c# - 区域顶点在 Eyeshot 上略有不同
- c# - 是否建议在 Windows 服务中运行 Visual Studio Tools for Office?