首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MySQL服务器端准备语句提高app性能

使用MySQL服务器端准备语句提高app性能
EN

Stack Overflow用户
提问于 2016-08-17 09:32:44
回答 1查看 278关注 0票数 1

我的处境:

  • MySQL 5.5,但可以迁移到5.7
  • 遗留应用程序正在执行单个MySQL查询以获取一些数据(1-10行,20列)
  • 查询可以通过应用程序配置进行修改。
  • 查询非常复杂,包含多个联接和条件,大约有20 it的代码
  • 查询被很好的描述,索引的使用经过了很好的调优,我花了很多时间在这个问题上,没有任何改进的余地,而不分裂成更小的查询。
  • 使用传统的应用程序,我会将这个大型查询分成几个更小的查询,并使用缓存来避免多次连接,但我的遗留应用程序不允许这样做。我只能使用一个查询返回结果。

我改善业绩的计划是:

  • 减少解析时间。对每个请求解析20 on的SQL,而只更改参数值似乎无效。
  • 我想把这个查询转换成准备好的语句,并且只用数据填充占位符。
  • 查询将被解析一次并多次执行,应该会更快。

问题/问题:

  • 首先:上述解决方案是否有意义?
  • MySQL准备的语句似乎与会话相关。我不能使用它,因为我不能执行任何额外的代码("init代码“)来为每个会话创建语句。
  • 我看到的其他解决方案是使用在过程或函数中生成的预先准备的语句。但是,我看到的例子依赖于使用CONCAT()动态生成查询,并在过程中本地执行准备语句。这类语句似乎会在每次过程调用时都准备好,因此不会节省任何处理时间。
  • 是否有任何方法在MySQL中声明服务器范围的而不是与会话相关的准备语句?这样他们才能在应用程序重新启动和服务器重新启动中存活下来?
  • 如果没有,是否可以缓存函数/过程中声明的已准备好的语句?
EN

回答 1

Stack Overflow用户

发布于 2016-08-17 23:08:03

我想以下几点会达到你的目标..。

  • 把怪物放进存储的程序里。
  • 安排总是从同一个连接执行存储的例程。(这可能涉及重组客户端和/或在中间插入"web服务“。)

这里的逻辑是每个连接编译一次存储的例程。我不知道这是否包括缓存“准备”。我也不知道你是应该赤裸裸地离开查询,还是人为地准备和执行。

建议你尝试一些时间安排,并尝试一些分析。后者可能会给你线索,让你知道我不确定的是什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38992876

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档