多个查询VS存储过程

时间:2013-07-24 06:43:54

标签: mysql sql stored-procedures

我有一个申请 每小时大约20000个数据操作 DATA-OPERATION总共有30个参数(对于所有10个查询)。有些是文本,有些是数字。一些文本参数长达10000个字符。

每个数据操作都会执行以下操作:

  • 单个DATA-OPERATION,在数据库中插入/更新多个表(大约10个)。
  • 对于每次DATA-OPERATION,我都会接一个连接,
  • 然后我在DATA-OPERATION中为每个查询使用新的prepared-statement。
  • 每次执行查询时都会关闭Prepared-statement。
  • 连接将重复用于所有10个预备语句。
  • DATA-OPERATION完成后关闭连接。

现在执行此数据操作,

  • 10个查询,10个准备语句(创建,执行,关闭),1个n / w调用。
  • 1个连接(打开,关闭)。

我个人认为,如果我从10个以上的查询创建一个存储过程,那将是更好的选择。

如果是SP,DATA-OPERATION将具有:

  • 1个连接,1个可调用语句,1个/ w命中。

我建议了这个,但我被告知

  • 这可能比SQL查询更耗时。
  • 它将在DB服务器上增加额外负载。

我仍然认为SP是更好的选择。请让我知道您的意见。

基准测试是一种选择。将不得不搜索任何有助于此的工具。 也可以任何人建议已经有这种问题的基准。

1 个答案:

答案 0 :(得分:4)

任何建议都部分取决于执行查询的脚本所在的位置。如果执行查询的脚本与MySQL实例位于同一服务器上,那么您将看不到那么大的差别,但与1个存储过程相比,执行200k查询仍然会有很小的开销。

我的建议是将其作为存储过程。您可能需要几个程序。

  1. 一个程序,它结合了您按操作执行的10个语句 进入1电话
  2. 可以使用CURSOR迭代参数表以进入过程1的过程
  3. 您的流程将是

    1. 使用参数填充表格,该参数将通过程序2
    2. 提供给程序1
    3. 执行程序2
    4. 这将产生性能优势,因为无需连接MySQL服务器20000 * 10次。虽然每个请求的开销可能很小,但毫秒加起来。即使每个请求的保存时间为0.1毫秒,也可以节省20秒。

      另一种选择可能是通过调整10个查询从上述数据库表中提取数据来修改您的请求,以便一次执行所有20k数据操作(如果可行)。所有这一切的关键是将参数加载到单个批量插入中,然后在过程中使用MySQL服务器上的语句来处理它们,而无需进一步往返。