MySQL: 如何获得视图的模块化,但是更长代码的优化?
MySQL: How to get the modularity of views, but the optimization of longer code?
在 MySQL 和 sqlite3 中,1) 使用嵌套视图编写查询通常比从视图中复制代码并将其粘贴到更大的视图中慢得多查询(来源:here, here, here,个人经验)。然而,2) 我喜欢视图如何使 SQL 代码更短和更模块化,就像其他语言中函数使代码更短更模块化一样。最后,3) 我很懒,我希望优化器为我完成计划连接、选择索引和寻找效率的所有工作。我怀疑如果我想亲自动手并自己计划连接,我可以编写模块化且快速的查询,但我不想那样做。
因此,1)速度,2)模块化,3)轻松,看来我只能有两个了。 我怎样才能同时拥有这三个?
在MySQL中,通常查询规划器以相同的方式处理从视图构造的查询和从嵌套子查询构造的查询。 MySQL,与其他一些品牌和型号的 RDMS 不同,它没有内置的物化视图。
但是,如果您想要同时保证速度、模块化和易用性这三者,您将不得不切换到另一个 RDMS。 Oracle 会做一些你想做的事,但要让它发挥作用,你必须聘请 DBA 并支付大笔许可费用。
常用 Table 表达式是另一种模块化代码的方法。 PostgreSQL handles those;商业 RDMS 也是如此。
在 MySQL 和 sqlite3 中,1) 使用嵌套视图编写查询通常比从视图中复制代码并将其粘贴到更大的视图中慢得多查询(来源:here, here, here,个人经验)。然而,2) 我喜欢视图如何使 SQL 代码更短和更模块化,就像其他语言中函数使代码更短更模块化一样。最后,3) 我很懒,我希望优化器为我完成计划连接、选择索引和寻找效率的所有工作。我怀疑如果我想亲自动手并自己计划连接,我可以编写模块化且快速的查询,但我不想那样做。
因此,1)速度,2)模块化,3)轻松,看来我只能有两个了。 我怎样才能同时拥有这三个?
在MySQL中,通常查询规划器以相同的方式处理从视图构造的查询和从嵌套子查询构造的查询。 MySQL,与其他一些品牌和型号的 RDMS 不同,它没有内置的物化视图。
但是,如果您想要同时保证速度、模块化和易用性这三者,您将不得不切换到另一个 RDMS。 Oracle 会做一些你想做的事,但要让它发挥作用,你必须聘请 DBA 并支付大笔许可费用。
常用 Table 表达式是另一种模块化代码的方法。 PostgreSQL handles those;商业 RDMS 也是如此。