【问题标题】:How is the performance of complicated mysql triggers vs python code?复杂的mysql触发器与python代码的性能如何?
【发布时间】:2021-07-22 21:33:53
【问题描述】:

我的 python 应用程序如下所示:

def create_something(data):
    some_stuff
    insert_into_database(data)

现在some_stuff很长很复杂,但原则上可以通过mysql程序来完成。所以我还可以添加一个数据库BEFORE INSERT 触发器,然后直接在数据库中完成所有操作。

实现的区别在于现在应用程序不是无状态的(有状态的?),主要是因为some_stuff。将所有这些放入数据库过程中将使我能够使应用程序完全无状态,这是我想要的。但是我想知道这两个选项之间的性能差异是什么?

【问题讨论】:

  • 性能应该更好,因为它对数据库的调用更少。
  • 但如果你想确定,你必须对它进行基准测试。没有办法预测 MySQL 存储过程会比类似的 Python 代码快还是慢。
  • @Barmar 感谢您的回答。如果函数是更多的数据操作和计算,并且只有有限数量的数据库调用,答案会改变吗?
  • 对两者进行基准测试,您就会看到。实在是没法说!
  • 我不明白为什么这两种方法的无国籍有任何区别。

标签: mysql performance


【解决方案1】:
  • 对数据库的调用越少越好,尤其是在客户端和服务器之间的物理距离很长的情况下。
  • 有些算法在 SQL 中实现起来确实很麻烦,因此您的应用语言更好。
  • 有些算法在 SQL 中实现起来要简单得多,因此 SQL 更好。示例:JOIN 比应用中的嵌套循环“更好”。
  • 使用触发器可以混淆代码;在决定是否在 SQL 中使用它们而不是编写更多 SQL 语句时,请记住这一点。此外,存储过程可能是表达代码的一种简洁方式。
  • Stored Procs 中的“游标”在语法和速度方面都很糟糕。
  • 数据库是数据的存储库,它不是存储引擎。 希望在 SQL 中完成所有处理。
  • 一个好的接口(在这种情况下,在 SQL 和您的应用程序之间)是一个最小的接口。例如,在仅返回聚合之前汇总数据,而不是将大量数据推到应用中进行汇总。

【讨论】:

    猜你喜欢
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多