假设我有一个子表单,在多条记录的数据表视图中,它使用户可以完全控制特定 MySQL 表的 CRUD。(记录由父表单过滤)。
选项 1 是简单地创建一个链接表并将其设置为子表单的记录源。这当然需要很少的工作。
选项 2 是创建一组存储过程,用于从 MySQL 表向/从本地临时表插入、删除、更新和读取记录。然后将子表单的记录源设置为本地表,并将适当的表单事件绑定到适当的存储过程调用。显然,这比选项 1 需要做更多的工作。
现在明显的问题是为什么选择选项 2?好吧,我一直在尝试用存储过程替换链接表,并且发现速度提高相当可观,尤其是在慢速网络上。我也做了一些侦探工作,并在 MySQL 日志文件中四处挖掘,我注意到链接表方法会生成数量惊人的 SQL 调用。这解释了我认为的性能差异。
无论如何,我现在正在考虑用存储过程选项替换所有链接表(也许只是重要的表)。有没有其他人有这种经验?有什么想法或建议吗?
当我使用 Access 时,我将这两种技术用作某种形式的命令查询分离(CQS)
也就是说,表单可以读取基表,但所有写入都是通过存储过程进行的。
就我而言,我选择这个是为了
注意:为了安全起见,我使用了 Access 视图而不是基表。
为清楚起见,在评论后编辑:
“只读”指的是对Access透明的服务器端权限。如果我们允许,Access 会尝试写入(而不是拦截调用并调用存储过程),并且我们会从数据库引擎中得到一个错误。