如果您使用的是php5和mysql5,那么在准备好的语句中使用存储过程是否有很大的优势? (我读到某处你可能无法从mysql5存储过程获得实质性的性能提升)
答案 0 :(得分:28)
它们实际上不是一回事 - 使用存储过程,数据库逻辑驻留在数据库中。准备好的语句基本上避免在多次调用查询时重新解析查询 - 性能优势可能会有很大差异。
使用其中一种的选择实际上取决于您的具体情况。我不再使用存储过程,因为我喜欢在一个地方拥有所有逻辑。
答案 1 :(得分:25)
存储过程对您的专业级(IE企业级)应用程序有意义:
还有其他原因。
准备好的陈述更适合在会话中完成的工作。但是如果你花时间创建一个准备好的语句,你基本上已经完成了创建存储过程所需的一切。不同之处在于存储过程可在多个会话中使用(受数据库中的GRANTS限制)。
我无法弄清楚的是,如果你有存储过程与准备好的声明的选项,为什么你会打扰准备好的陈述。大多数SP与PS的讨论似乎都关注它们之间的差异,而不是为什么要使用一个与另一个。这似乎总是归结为“取决于你想要做什么。”但我还没有看到一个组织良好的描述:如果你需要VS使用一个proc,如果你需要,可以使用一个声明......
答案 2 :(得分:10)
存储过程的一些优点:
存储过程的一些缺点:
我认为这个问题不存在单一的通用答案,因为根据情况有利有弊。如果您遵循简单,干燥,测试和避免过早优化等原则,您可能会很好。
答案 3 :(得分:4)
可能不是这种情况或者值得在这里提及,但是在它们与语言无关的情况下,存储过程也是“可移植的”。您可以像使用PHP一样从Java内部调用数据库中的相同存储过程。因为这些过程驻留在数据库中,所以有权访问数据库的任何东西都可以用同样的方式查询它们。
答案 4 :(得分:2)
存储过程的实质优势在于,在将逻辑应用于它之前,您的数据不会跨越图层(在这种情况下,它将是PHP / MySQL层)。有些查询可能需要多个select语句,这些语句通过PHP比在MySQL中慢。
现在,正如tobyhede指出的那样,将所有逻辑放在一个地方是件好事。但是我参与过那些使用PHP查询所需数据简直不切实际的项目;它必须通过存储过程来完成。
答案 5 :(得分:2)
我将首先说我不喜欢存储过程的想法,我宁愿去准备好的语句路由。在这种特殊情况下,我认为你也在比较苹果和橙子......它们都在那里完全填充不同的功能......
如果应用程序是95%数据库驱动的话,我只考虑存储过程,那么在db中有一些逻辑是否有意义。
答案 6 :(得分:0)
不熟悉php,但通常存储过程已经“编译”,因此可能会比sql语句产生更快的性能。
虽然我的偏好通常是从代码管理/部署和单元测试的角度来看SQL。