很多开发者一提到 SQL 就“谈此色变”,觉得难以调试、难以定位 bug!最后就是一句话,就是这个东西碰不得,是邪教。存储过程这个东西存在这么久,不可能一无是处吧:
.有没有可能,像 TypeScript 转译为 JavaScript 一样,有一种高级语言可以:
.编译成各类数据库支持的 SQL (比如 PostgreSQL 、SQL Server 等);
.根据目标数据库的特性自动优化生成对应代码;
.如果使用了目标数据库不支持的语法,比如在目标是 PostgreSQL 时用到了 SQL Server 的专有语法,那么编译器应能直接报错并给出明确提示;
.最好还能在开发阶段提供类型检查、智能提示和跨平台兼容性检查。
大家觉得存储过程真的是洪水猛兽吗?
其他 ToC 尤其是国内这些:
1. 海量用户海量并发的,存储过程单点性能就不太合适了
2. 业务需求的快速迭代,存储过程开发和维护都是不合适的
国内很多企业去 IOE 的过程中,存储过程也越来越少、很多团队已经消灭存储过程了。
老屎山,能不动,就不动;
新项目,能不用,就不用。
如果当年没有去 IOE 的运动,估计现在还有一大波的人在写存储过程。存储过程写起来是爽,多表关联,批量更新,效率也非常高。大约 2014 年,2015 年之前的 ERP 系统,后面的业务逻辑基本上都是存储过程,银行系统,电力系统,大型企业的内部管理系统,基本上都是存储过程。
上面说某些行业有用的,你看看他们有多少 DBA ,或者每年花多少钱从 Oracle 买 DBA 服务
但是对于 SAP, 用友, 久其, 任我行那些 ERP 系统, 以及四通一达的那些 WMS 系统来说, 存储过程就是解决复杂需求的利器. 哦对, 也包括电信运营商与银行. 它们的存储过程更加复杂, 但存储过程对他们来说也往往是必然的选择.
业务逻辑越是复杂, 存储过程的就越是有存在的必要.
哦对, 铁路的 TRS 后面的业务逻辑全都是存储过程.
性能问题, 更应该用别的方式优化, 比如调整结构, 异步, 分布式, 缓存等.
说是邪教的,无非是因为他们的使用场景不适合用存储过程罢了。
给你一台 1TB 内存 128 核心的服务器跑 Oracle 数据库,用户数量就 1 万人,业务逻辑常年不多变,你告诉我为啥不用存储过程。
稍微复杂一点的数据交互,不用存储过程,慢的要死。