我正在使用Go(1.6.x)sql包以及PostGres(9.4)构建API。我准备好的陈述应具有适用范围或要求范围吗?阅读文档后,将它们放在应用程序范围内似乎可以更有效地减少准备阶段的数量。但是,也许还有其他考虑因素,而准备好的陈述并不是为了活那么久?
准备好的语句使您可以执行重复的SQL命令,这些命令可能仅在参数值方面有所不同。
它们并不意味着“长寿”,因为一条准备好的语句可能会保留一个活动的数据库连接(如果从事务中调用,它们会保留)(“长寿”意味着不使用它们时;重复执行许多条准备好的语句是完全可以的)时间,即使这将需要很长时间)。连接是一种昂贵的资源,应仅在需要时才保留。仅通过创建一堆准备好的语句而不关闭它们,您可能会耗尽活动/允许的连接,然后阻止与数据库服务器的进一步通信。
如果要在同一(HTTP)请求中多次执行相同的insert
,update
或select
使用不同参数的语句,请使用预处理语句。不要使用准备好的语句来延长(HTTP)请求。
在某些驱动程序实现和数据库服务器中,准备好的语句还可能涉及在DB服务器本身(而不是Go应用程序)中分配的资源。例如,一条准备好的语句可以在DB服务器上进行预编译,并且服务器可以准备查询执行计划,为其分配某些资源(例如内存)。这些可能会永久保留,直到准备好的语句关闭。
有一篇文章(由Myles McDonnell在下面的评论中发布),涉及Go 中Prepared Statements的实现细节。它提到如果未从事务创建准备好的语句,它们会将连接释放回连接池,但是在需要时,它们会尝试重用准备好的语句(因为如果db服务器辅助/也起着积极的作用,在准备好的语句中,它绑定到服务器端的连接)。如果没有,他们将在新的连接上
重新准备 它们(导致不希望的性能开销)。
总而言之,您所描述的是一个工作模型,如果在许多后续请求中需要/执行的准备好的语句数量很少,那么它们可能意味着响应时间更短。但这也意味着从长远来看,它们可能会导致所有准备好的语句将在池的所有连接上准备好。确定您的情况是否可以接受。
通常,应该避免这种情况(并且在HTTP请求结束之前关闭预处理语句),但是如果您只有少数几个,并且确实需要多个彼此紧接的请求,则可以将它们移出请求范围。
问题内容: 我只是想知道是否有一种方法可以在MySQL中使用某种形式的预处理语句,这样就不必逃避所有输入,也不必将所有文件从MySQL切换到MySQLi。我真的不相信转义功能,因此,如果在常规MySQL中有任何可行的替代方法,那就太好了。 问题答案: 使用PDO(PHP数据对象)连接到MySQL数据库。此方法将确保所有数据库输入将始终被视为文本字符串,并且您将不必进行任何手动转义。 结合正确使用h
我想知道使用比有什么好处? 最简单的方法是: 如您所见,我可以将数据绑定到< code>preparedStatement而无需< code>boundStatements。< code>boundStatement在哪里有用?
问题内容: 我有一个包含多个搜索条件的搜索页面 员工姓名 员工ID 入职日期 部门 等等 用户可以提供一个或多个搜索条件。我需要查询数据库以获取搜索结果。 使用纯JDBC,有两种方法可以实现此目的。 通过附加用户提供的搜索条件来准备SQL查询。 例如: 使用 例如: 此答案说明,像上面的ex 1一样,可以修改ex2,如下所示 然后仔细地(牢记参数索引)将输入设置为准备好的语句。听起来这不是一个非常
问题内容: 我之前在一个PHP项目中工作过,其中准备好的语句使SELECT查询的速度提高了20%。 我想知道它是否适用于Python?我似乎找不到任何明确表明可以或不能做到的事情。 问题答案: 直接回答,不,不是。 joshperry的答案很好地解释了它的作用。 从eugene y答案到类似问题, 检查MySQLdb 包注释: 在MySQLdb中,通过转义字符串然后将其盲目插入到查询中来进行“参数
VARCHAR 100 VARCHAR 100 VARCHAR 100 [ID][NAME][NICKNAME][FAVORITE_COLOR] 1约翰·约翰尼·瑞德 我尝试的另一个选择是: 这也不起作用,结果集为空。 最后,我尝试了一个不同的SQL,但它显然是错误的,返回了太多的行(因为它不够严格): 所以我的问题是:如何使用Java PreparedStatement使用MySQL“is nu
问题内容: 我有一个关于将字符串插入SQL Server 2008 R2的问题。当我尝试插入带有一些国家字母的字符串时,会收到“?” 反而。 我知道在字符串文字的开头添加将解决此问题,但是我正在使用JDBC准备的语句,如下所示: 我的问题是:如何添加此“ N”字母?我应该做这样的事情吗? 老实说,我不相信,因为这根本行不通。 问题答案: 根据@a_horse_with_no_name和@ gofr