在现代 RDBMS 上,存储过程仍然比内联语句更高效吗?
历史上,由于多种因素,存储过程被认为比内联语句更快例如预解析的 SQL 和减少网络延迟。然而,这些优势在现代数据库中已经减弱:
预解析 SQL: 虽然仍然有益,但在现代 CPU 上性能提升不太明显。然而,对于高度重复的 SQL 语句,解析开销会累积。
预生成的查询执行计划:现代优化器缓存单个 SQL 语句的查询计划,大大减少存储过程之间的性能差异和即席 SQL。优化器路径计划还可以显着加快计划生成速度。
减少网络延迟:随着以太网速度的加快,存储过程的延迟优势变得不那么明显,尤其是对于小型 SQL 语句。
缓存的好处:如果数据已经缓存在 DBMS 上并且服务器端转换已完成,那么存储过程可以提高性能。执行。然而,对于没有共享内存访问 DBMS 数据的应用程序,存储过程仍然具有优势。
参数化/准备 SQL:参数化 SQL 是存储过程和即席 SQL 之间的混合体。它使用查询值的参数,并允许优化器缓存查询执行计划,从而提供与存储过程类似的性能优势。
Ad Hoc SQL:现代 DBMS 可以将 ad hoc SQL“抽象”为参数化版本,弥补了存储过程的性能差距。使用复杂的优化器,即席 SQL 性能通常可以与平均用例的存储过程性能相媲美。
结论:
在大多数情况下,使用存储过程只是为了性能原因很可能是过早的优化。对于简单或中等的 SQL 工作负载,参数化或即席 SQL 可以提供相当的性能。存储过程在特定场景中可能仍然有用,例如:
以上是在现代数据库中,存储过程仍然比内联 SQL 更快吗?的详细内容。更多信息请关注PHP中文网其他相关文章!