Here is a schematic calculation algorithm:
- Each statement breaks into very small parts.
- Complexity of each statement consists of complexity of all its parts.
- Each part has some constant complexity (weight), usually 0.01. Why so small weight? Each statement can break into a huge number of parts.
- Each identifier has weight of one. So the more identifiers you use (tables, functions, columns) the more complex your query is.
- Some statements or its part can have a big weight (eg EXEC(query) has weight of ten).
- For complex parts of statement (eg - correlated subquery or query under EXISTS clause) its complexity is multiplied by "Complex factor" (for derived_table by factor of two. Rowset functions are multiplied by factor of ten).
- First <table_source> in FROM clause have multiplication factor of one, each next have multiplication factor of one and a half.