Общие показатели сложности программного обеспечения включают Цикломатическая сложность (мера сложности управляющего потока) и Сложность Холстеда (мера комплексной арифметики).
«Поток управления» в запросе SQL лучше всего связан с операторами «и» и «или» в запросе.
«Вычислительная сложность» лучше всего связана с такими операторами, как SUM или неявные СОЕДИНЕНИЯ.
Как только вы решили, как классифицировать каждую единицу синтаксиса SQL-запроса относительно того, является ли это «потоком управления» или «вычислением», вы можете напрямую вычислять цикломатические или хальстедовские меры.
То, что оптимизатор SQL делает с запросами, я считаю абсолютно неактуальным. Цель показателей сложности - определить, насколько сложно человеку понять запрос, а не то, насколько эффективно он может быть оценен.
Точно так же, то, что говорит DDL или участвуют ли представления или нет, не должно быть включено в такие меры сложности. Предположение, лежащее в основе этих метрик, заключается в том, что сложность механизма внутри используемой абстракции не интересна, когда вы просто вызываете ее, потому что, по-видимому, эта абстракция делает что-то, что хорошо понимает кодер. Вот почему меры Халстеда и Цикломатика не включают в свои подсчеты вызываемые подпрограммы, и я думаю, что вы можете привести хороший пример того, что представления и информация DDL являются теми «вызываемыми» абстрактными выражениями.
Наконец, насколько правильные или совершенно неправильные эти числа сложности не имеют большого значения, поскольку они отражают некоторую правду о сложности, и вы можете сравнивать их относительно друг друга. Таким образом, вы можете выбрать, какие фрагменты SQL являются наиболее сложными, отсортировать их все и сосредоточить внимание на самых сложных.