Hasty Briefsbeta

双语

We need to stop using Stored Procedures

2 days ago
  • 应用程序中的存储过程是不必要的,而且往往带来的问题多于解决的问题,因为与参数化查询相比,它们没有性能优势。
  • 通常被视为存储过程优势的计划缓存和参数化查询,可以通过常规SQL实现,因此存储过程没有特殊价值。
  • 使用存储过程将应用程序和数据库代码版本分离,导致迁移麻烦、回滚困难以及潜在的同步问题。
  • 应用程序开发人员应该拥有自己的数据库查询,以便它们与应用程序逻辑保持版本一致,从而实现更轻松的回滚和更新。
  • 应用与数据库交互的最佳实践包括:最小化网络请求、使用索引(包括覆盖索引和筛选索引),并注意ORM陷阱,如N+1查询和笛卡尔积爆炸。
  • 具有不同参数的动态查询可能会独占CPU;表值参数(TVP)可以帮助重用查询计划。
  • 注意参数化查询中的类型转换,避免隐式转换导致性能下降。
  • 筛选索引对于窄查询很有用,并且应使用硬编码值,而不是参数。
  • 总的来说,存储过程应该是例外情况,仅用于特定的安全需求,而不是默认选项,开发人员应专注于学习SQL和性能分析。