sql - 优化 SQL 查询 - 连接 4 个表

标签 sql sql-server tsql join optimization

我正在尝试加入 4 张 table 。目前我已经通过这样做实现了它。

    SELECT columns
    FROM tableA
    LEFT OUTER JOIN tableB ON tableB.address_id = tableA.address_id
    INNER JOIN tableC ON  tableC.company_id = tableA.company_id AND tableC.client_id = ?
    UNION
    SELECT columns
    FROM tableA
    LEFT OUTER JOIN tableB ON tableB.address_id = tableA.gaddress_id
    INNER JOIN tableD ON tableD.company_id = tableA.company_id AND tableD.branch_id = ?       

tableC 和 tableD 的结构非常相似。假设 tableC 包含客户的数据。 tableD 包含客户分支的数据。表 A 是公司,表 B 是地址 我的目标是从表 A 中获取数据,这些数据连接到表 B(所有有地址的公司)以及表 D 和表 C 中的所有数据。

这很好,但我担心这会很慢。

最佳答案

我认为你可以这样欺骗它:

UNION C之间, D并且只有加入查询的其余部分,它应该显着改善查询:

SELECT columns
FROM TableA
LEFT OUTER JOIN tableB ON tableB.address_id = tableA.address_id
INNER JOIN(SELECT Columns,'1' as ind_where FROM tableC
           UNION ALL
           SELECT Columns,'2' FROM TableD) joined_Table
 ON  (joined_Table.company_id = tableA.company_id AND joined_Table.New_Col_ID= ?)
New_Col_ID -> 只需同时选择branch_idclient_id在同一列中并将其别名为 New_Col_ID管他呢

此外,您可以索引表(如果尚不存在):
TableA(address_id,company_id)
TableB(address_id)
TableC(company_id,client_id)
TableD(company_id,branch_id)

关于sql - 优化 SQL 查询 - 连接 4 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37830249/

相关文章:

php - 如何防止 PHP 中的 SQL 注入(inject)?

c# - 使用 ODBC 从列名中包含空格的 CSV 文件中进行选择

sql - 优化查询

sql - 如何将连接的返回限制为每个表只有一行?

sql - CROSS APPLY vs OUTER APPLY速度差

python - Sqlite - 如何使用更多的内存和缓存,并使其运行得更快

sql - Swift 4 SQLITE 查询输出因 where 子句而失败

c# - 回滚 SQL Server 查询

sql - 选择不同的行并显示每个值的计数

sql-server - SQL Server : link DB2 table