具有连接的数据库性能

时间:2011-07-04 17:36:47

标签: sql sql-server join

  

可能重复:
  When and why are database joins expensive?

我的公司已经为我分配了提高数据库性能的工作。 早期的开发人员编写了一个包含5个内连接的查询。

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

1 个答案:

答案 0 :(得分:7)

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

并非总是需要JOIN - 如果表格的JOIN之外没有引用,EXISTSIN将表现更好。例如:

SELECT a.column
  FROM TABLE_A a 
  JOIN TABLE_B b ON b.col = a.col

... VS:

SELECT a.column
  FROM TABLE_A a 
 WHERE EXISTS(SELECT NULL 
                FROM TABLE_B b 
               WHERE b.col = a.col)

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

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

    JOIN table x ON DATE(x.col) = y.column
    

    ...因为这种情况会在x.col无用的

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

结论

将数据非规范化可能是一种性能优势是合理的,但这是经过大量审核后最后考虑的选择。测试