【问题标题】:MySQL: Is Statement cached in Database?MySQL:语句是否缓存在数据库中?
【发布时间】:2015-02-01 21:16:54
【问题描述】:

我会在这里从另一个问题中得到一些文字:

PreparedStatementStatement 的稍微强大的版本,并且应该始终至少与语句一样快速和易于处理。 Prepared Statement可以被参数化

大多数关系数据库通过四个步骤处理 JDBC/SQL 查询:

  1. 解析传入的 SQL 查询
  2. 编译 SQL 查询
  3. 规划/优化数据采集路径
  4. 执行优化查询/获取并返回数据

对于发送到数据库的每个 SQL 查询,Statement 将始终执行上述四个步骤。 Prepared Statement预先执行上述执行过程中的步骤(1)-(3)。因此,在创建 Prepared Statement 时,会立即执行一些预优化。其效果是减少执行时数据库引擎的负载。

现在这是我的问题:

如果我使用成百上千个Statement,会不会导致数据库出现性能问题? (我并不是说他们会因为每次做更多的工作而表现得更慢)。所有这些语句会被缓存在数据库中,还是会在执行后立即丢失在空间中?

【问题讨论】:

    标签: mysql database prepared-statement


    【解决方案1】:

    由于使用准备好的语句没有任何限制,因此您应该谨慎使用它们。 正如您所说,您需要准备数百个,请三思而后行,可能是您用错了。 它应该使用的模式是有一个应用程序每秒执行大量的插入/更新/选择数百或数千次,这只在变量上有所不同。所以在现实世界中,这就像连接、创建会话、发送语句以及向该语句发送一堆变量。

    但如果您的计划是在每个单独的操作上创建准备好的,那么最好使用通用查询。

    关于你的问题:

    1. 数百条语句不会杀死 mysql 或导致性能下降
    2. 当客户端会话启动并运行时,准备好的存储在内存中。一旦你关闭会话准备好的模具。

    确保您需要它:

    1. 您的应用能够快速执行语句,让您获得使用它们的速度价值
    2. 您的查询不会有可变数量的参数,否则您可以通过在每个语句上创建对象并存储在内存中来杀死您的应用程序

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-18
      • 2016-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      相关资源
      最近更新 更多