gpt4 book ai didi

mysql - 左加入两个 View 很慢?

转载 作者:行者123 更新时间:2023-11-29 04:44:09 24 4
gpt4 key购买 nike

SELECT DISTINCT
viewA.TRID,
viewA.hits,
viewA.department,
viewA.admin,
viewA.publisher,
viewA.employee,
viewA.logincount,
viewA.registrationdate,
viewA.firstlogin,
viewA.lastlogin,
viewA.`month`,
viewA.`year`,
viewA.businesscategory,
viewA.mail,
viewA.givenname,
viewA.sn,
viewA.departmentnumber,
viewA.sa_title,
viewA.title,
viewA.supemail,
viewA.regionname
FROM
viewA
LEFT JOIN viewB ON viewA.TRID = viewB.TRID
WHERE viewB.TRID IS NULL

我有两个 View ,其中包含大约 10K 和 5K 条记录。他们每个人进来的速度都非常快——几分之一秒。当我尝试从 ViewA 获取所有不在 ViewB 中的记录时,它可以工作,但速度很慢。所有底层 TRID 字段都是相同的字符集,并且都设置为 varchar (10),索引和表都是 Innodb。现在查询需要 16 秒。有什么我可以做的吗?

最佳答案

通常,使用JOIN,MySQL 必须为每个连接的记录进行查找。使用键时查找速度很快,但在您的情况下,实际上没有任何键,因为连接表是一个 View 。

为了尝试让 MySQL 在第一个 View 中针对每条记录在第二个 View 后面运行一次查询,我们可以使用子查询。

SELECT *
FROM viewA
WHERE TRID NOT IN (SELECT TRID FROM viewB);

这应该允许 MySQL 在子查询(在临时表中)中获取 viewB 的所有 TRID 值,然后对它们搜索 viewA 中的每条记录。

来自 MySQL docs :

MySQL executes uncorrelated subqueries only once. Use EXPLAIN to make sure that a given subquery really is uncorrelated.

关于mysql - 左加入两个 View 很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22180727/

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