我有一个 mysql 数据库,有 60 多个 View ,一些是辅助的,一些是最终的。他们之间有依赖关系。这当然会给我带来性能问题,但我并没有设计这个数据库和系统。
为了加快某些报告的速度,我将最终 View 具体化为表格。我也可以通过具体化辅助 View 来加快这个过程,然后使用它们来具体化其他 View ,从而避免重新处理辅助 View 。
为此,我需要一种方法来查看 View 之间的依赖关系,以便我可以以正确的顺序具体化 View 。如果我可以将该信息输入到图形中(例如使用 Graphviz 或 Tikz 等工具),那就太好了。
除了手动分析每个 View 之外,还有什么方法可以做到这一点吗?
最佳答案
我使用以下查询从 FROM 子句中获取依赖项:
SELECT views.TABLE_NAME As `View`, tab.TABLE_NAME AS `Input`
FROM information_schema.`TABLES` AS tab
INNER JOIN information_schema.VIEWS AS views
ON views.VIEW_DEFINITION LIKE CONCAT('%',tab.TABLE_NAME,'%')
然后我将输出提供给一个 python 脚本,该脚本使用 ete2 模块将依赖项可视化为树结构。如果有人感兴趣,我可以分享脚本。 编辑:注意,我刚刚意识到,如果 View 名称是另一个 View 名称的子字符串,则此查询可能会导致问题。如果任何机构可以提出改进建议,请提出。
关于mysql - 如何获取 View 之间的mysql依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14603740/