首页 > 解决方案 > 动态准备好的语句有意义吗?

问题描述

我想创建动态准备语句,每个部分都是动态的,值、表和 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))

我想知道这是否有意义,性能方面

我修改了文档,我的理解是,通过使准备好的声明的所有部分都动态化,那么计划可能不会那么有效,或者根本没有效果。

我应该怎么办?我应该保留这种动态语法吗?或者它没有任何意义,所以我必须创建多个准备好的语句并将它们用于不同的表?

谢谢

标签: node.jspostgresqlprepared-statementpgnode-postgres

解决方案


这里应该没有性能问题。SQL 的“动态”部分只是传递给查询对象的字符串,因此唯一要考虑的性能是解析 text 属性。您正在向数据库传递一个完全准备好的语句;是 nodejs 正在解析不同的变量以提供查询对象的 text 属性。


推荐阅读