gpt4 book ai didi

sql - 衡量 SQL 语句的复杂性

转载 作者:行者123 更新时间:2023-12-03 10:16:00 42 4
gpt4 key购买 nike

大多数编程语言中方法的复杂度可以用静态源代码分析器的圈复杂度来衡量。是否有类似的度量标准来衡量 SQL 查询的复杂性?

测量查询返回所需的时间很简单,但是如果我只想量化查询的复杂程度怎么办?

[编辑/注释]
虽然获取执行计划很有用,但在这种情况下,这不一定是我想要确定的。我不是在寻找服务器执行查询的难度,我正在寻找一个指标来确定开发人员编写查询的难度以及包含缺陷的可能性。

[编辑/注2]
诚然,有时测量复杂性没有用,但有时也有用。有关该主题的进一步讨论,请参阅 this question .

最佳答案

软件复杂性的常用度量包括 Cyclomatic Complexity (衡量控制流的复杂程度)和 Halstead complexity (算术复杂度的度量)。

SQL 查询中的“控制流”与查询中的“和”和“或”运算符最相关。

“计算复杂性”最适合与 SUM 或隐式 JOINS 等运算符相关。

一旦决定了如何将 SQL 查询的每个语法单元分类为“控制流”还是“计算”,您就可以直接计算圈数或 Halstead 度量。

我认为 SQL 优化器对查询的作用完全无关紧要。复杂性度量的目的是描述一个人理解查询的难度,而不是它的评估效率如何。

同样,DDL 所说的内容或是否涉及 View 也不应包含在此类复杂性度量中。这些度量背后的假设是,当您简单地调用它时,使用的抽象内部机器的复杂性并不有趣,因为大概该抽象做了一些编码人员很好理解的事情。这就是为什么 Halstead 和 Cyclomatic 度量在其计数中不包括被调用的子例程的原因,我认为您可以很好地证明 View 和 DDL 信息是那些“调用”的抽象。

最后,这些复杂度数字有多完美或有多完美都无关紧要,只要它们反射(reflect)了一些关于复杂度的真相,并且您可以将它们相互比较。这样你就可以选择最复杂的 SQL 片段,从而对它们进行排序,并将你的测试注意力集中在最复杂的片段上。

关于sql - 衡量 SQL 语句的复杂性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3353634/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com