使用54个SELECT优化视图-使用所使用的进程进行了更新

问题描述 投票:1回答:2

我已经开始了新工作,正在研究他们希望我熟悉的一些观点。

我正在浏览的视图之一具有54 SELECTs。在浏览之前和之后,我从未见过如此庞大的View,我相当确定可以对其进行优化。

我正在寻找一种比较简单的方法来比较每个选择之间的JOIN,以找到共同点,而不必手动筛选所有选择。

我相当确定这就是我要做的,但是我希望有人能够以更简单或更有效,更省时的方式进行此操作...

有人吗? :)

sql oracle optimization view query-optimization
2个回答
1
投票

[确定相似的代码行是一个困难的问题,据我所知,Clone Doctor是唯一可以对PL / SQL执行此操作的程序。

大约十年前,我只使用过一次。但是我记得它为发现不同的代码行在深层次上确实重复而感到惊讶,感到惊讶。它不是完美的,并且有一些错误,并且花了一些时间才能开始工作。但是有一个免费的试用版。


0
投票

[更新12/4/2019:TLDR;我将每个主SELECT分离到了自己的文件中,然后在完整视图代码文件上使用Notepad ++,我发现了通用值,可以将每个单独的SELECT排序并组织到一个名为通用值的文件夹中。在这里,我使用WinMerge将各自文件夹中的每组SELECT相互比较,以发现差异和共同点。然后,我开始使用CTE(因为这是Oracle和View)来重构和最小化过多的代码(和表调用>。


我最终通过查找作为视图中一列的字段名称来拆分视图SELECT。这意味着我将获得每个SELECT的开头。

然后我将每个副本复制并粘贴到不同的.sql文件中。我还将完整视图保存到它自己的.sql文件中。

使用Notepad ++,我搜索了视图列名称的每个实例,并删除了作为视图所需主要信息的列值。使用该信息,我根据该值将每个SELECT分组到一个文件夹中

一旦我将所有的SELECT放入各自的文件夹中,我就将WinMerge用于SELECT使其与同一个文件夹中的其他SELECT一起使用。这帮助我找到了共同点和差异,其中一些差异很难将数据源表与其他数据集中到CTE中。

此后,我一直在更新,重构和修复视图,一次将一个文件夹与SELECTs分组在一起。

我所在的项目让我接触了用于将SELECTs组织到文件夹中的每个主要代码值,因此我将最终重新编码整个视图。 :)

© www.soinside.com 2019 - 2024. All rights reserved.