gpt4 book ai didi

mysql - SQL 性能建议 - 在数百万条记录上选择空列花费的时间太长

转载 作者:行者123 更新时间:2023-11-29 20:15:52 26 4
gpt4 key购买 nike

您好,我有以下查询输出,它输出 580 万行:

the output is 5.8 million rows

查询

SELECT b.BoardingZones as a, c.BoardingZones as b  FROM gocard.journey_brisbane_transport as a
LEFT JOIN gocard.journey_brisbane_transport_boarding_stop_zones as b
ON a.Boarding_Stop = b.Boarding_Stop
LEFT JOIN gocard.journey_brisbane_transport_boarding_stop_zones as c
ON a.Alighting_Stop = c.Boarding_Stop

我想输出不包含“空”值的 a 列和 b 列。像这样:

enter image description here

我尝试运行以下查询:

SELECT *
FROM (SELECT b.BoardingZones as a, c.BoardingZones as b FROM gocard.journey_brisbane_transport as a
LEFT JOIN gocard.journey_brisbane_transport_boarding_stop_zones as b
ON a.Boarding_Stop = b.Boarding_Stop
LEFT JOIN gocard.journey_brisbane_transport_boarding_stop_zones as c
ON a.Alighting_Stop = c.Boarding_Stop) as g
WHERE g.a IS NOT NULL
and g.b is NOT NULL

这个查询的性能根本不好。并需要几个小时才能完成。我是数据库设计的新手。可以使用什么方法来加速这个查询?也许是一个索引?

问题是,索引可以对 SQL 结果执行,还是只对表执行?

谢谢丹尼尔

最佳答案

您需要记住以下几点:如果您确实希望结果中出现 NULL,请使用左/右连接,否则使用常规连接,这样工作速度更快(通常)。

第二件事是你应该添加索引,但要知道,如果你有很多更新/插入/删除操作,它可能会减慢速度(如果你收到 580 万行,我认为你有很多插入)时间,但尽管如此,我认为这是一个很好的权衡)

我强烈建议使用常规连接,因为在 mysql 中你可以索引 NULL,但在其他数据库中你不能,所以如果你决定更改数据库会容易得多(从个人错误来看)。

关于mysql - SQL 性能建议 - 在数百万条记录上选择空列花费的时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39784064/

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