数据库与连接的性能

pok*_*ate 0 sql sql-server join

可能重复:
何时以及为何数据库加入昂贵?

我的公司给了我一份提高数据库性能的工作.早期的开发人员编写了一个有5个内连接的查询.

在不损害性能的情况下可以使用的内连接数是多少?

OMG*_*ies 7

在特定情况下,JOIN可以比替代品更好地执行.并且在标准化数据库中看到许多连接并不罕见.

JOIN并不总是必要的 - 如果表格的JOIN之外没有引用,EXISTS或者IN表现更好.例如:

SELECT a.column
  FROM TABLE_A a 
  JOIN TABLE_B b ON b.col = a.col
Run Code Online (Sandbox Code Playgroud)

... VS:

SELECT a.column
  FROM TABLE_A a 
 WHERE EXISTS(SELECT NULL 
                FROM TABLE_B b 
               WHERE b.col = a.col)
Run Code Online (Sandbox Code Playgroud)

如果结果集需要连接,则评估情况:

  • 外键上是否有索引(用于JOIN标准的列)?
  • 是否需要JOIN功能的任何连接标准都可以使用.IE:

    JOIN table x ON DATE(x.col) = y.column
    
    Run Code Online (Sandbox Code Playgroud)

    ...因为这样的情况会使索引x.col无用

  • 外键的数据类型是否尽可能窄,因为用于存储值的字节越少意味着数据库性能越快.IE:VARCHAR(4)vs INT

结论

非正规化数据可能是一种性能优势,但这是经过大量审查和测试后最后考虑的选择.