gpt4 book ai didi

mySQL - UNION 语句的性能

转载 作者:行者123 更新时间:2023-11-30 01:13:41 25 4
gpt4 key购买 nike

我需要组合两个具有相同列的表,并在复杂的 JOIN 查询中使用结果,但这会大大降低性能。此带有 UNION 的查询的执行时间为 7 秒:

SELECT DISTINCT `admin`.`Fund_ID`,
`admin`.`Fund_Name`
FROM (
(SELECT *
FROM `admin`)
UNION
(SELECT *
FROM `admin_custom`
WHERE `user_id`=361)) admin
LEFT JOIN (
(SELECT *
FROM `quant1`)
UNION
(SELECT *
FROM `quant1_cust`
WHERE `user_id`=361)) quant1
ON (quant1.`Fund ID`=`admin`.`Fund_ID`)
WHERE quant1.`VaR 95`>-0.028

但是用一个简单的表替换 UNION 子句只需 0.006 秒。如何解决性能问题?

最佳答案

您可以对数据库进行“附加更改”,以在 UNIONED 表之间创建通用性。这将是一次重构,仅添加表和列,从而保持与未更改的应用程序代码的读取兼容性。

在此示例中,您将在admin“左侧”创建一个公用表。和admin_custom然后将其加入其中。这将包含基金 ID、类型(以便您知道您要加入哪个)以及(如果可能)其他有用的常见列。

您还可以在quant1“左侧”创建一个公用表。和quant1_cust然后将从 that 加入。

然后,您可以更改查询以使用公共(public)表中的基金 ID 链接,将 UNION 子句替换为“公共(public)表”(如果可能)或 "Common Table" left outer join Legacy1 left outer join Legacy2 .

我不明白这些表到底是什么,所以我无法帮助您进行合理的命名。 (命名是设计中最重要的部分,您应该在问题中解释这一点。)

但是这种方法对于我领导的一个大型政府项目确实非常有效,其中公用表是 DOCUMENT 和 DOC_ELEMENT。具有 8 种不同文档类型且没有预先存在的共性的树形结构文档。

在我们的例子中,文档被添加到 RFP、TENDER、PRICEPLAN 等的“左侧”,并提供了通用性。

这不是完全向后兼容——您需要更改应用程序的 INSERT 代码。如果您要进行重构,您可能需要考虑将相同的表结构放入同一个表中

最好的办法是尝试可能的结构,验证可能的性能,并找出需要更改哪些代码。然后您可以选择一条轨迹。

关于mySQL - UNION 语句的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19263400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com