我已经开始了新工作,正在研究他们希望我熟悉的一些观点。
我正在浏览的视图之一具有54 SELECTs。在浏览之前和之后,我从未见过如此庞大的View,我相当确定可以对其进行优化。
我正在寻找一种比较简单的方法来比较每个选择之间的JOIN,以找到共同点,而不必手动筛选所有选择。
我相当确定这就是我要做的,但是我希望有人能够以更简单或更有效,更省时的方式进行此操作...
有人吗? :)
[确定相似的代码行是一个困难的问题,据我所知,Clone Doctor是唯一可以对PL / SQL执行此操作的程序。
大约十年前,我只使用过一次。但是我记得它为发现不同的代码行在深层次上确实重复而感到惊讶,感到惊讶。它不是完美的,并且有一些错误,并且花了一些时间才能开始工作。但是有一个免费的试用版。
[更新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组织到文件夹中的每个主要代码值,因此我将最终重新编码整个视图。 :)