gpt4 book ai didi

mysql - 更高效的内连接查询

转载 作者:行者123 更新时间:2023-11-29 05:13:20 27 4
gpt4 key购买 nike

是否可以使此查询更高效?

SELECT DISTINCT(static.template.name) 
FROM probedata.probe
INNER JOIN static.template ON probedata.probe.template_fk = static.template.pk
WHERE creation_time >= DATE_SUB(NOW(), INTERVAL 6 MONTH)

谢谢。

最佳答案

首先,我将使用表别名重写它,以便我可以读取它:

SELECT DISTINCT(t.name) 
FROM probedata.probe p INNER JOIN
static.template t
ON p.template_fk = t.pk
WHERE creation_time >= DATE_SUB(NOW(), INTERVAL 6 MONTH);

让我做两个假设:

  • namestatic.template
  • 中是唯一的
  • creation_time 来自probe

第一个假设特别有用。您可以将查询重写为:

SELECT t.name
FROM static.template t
WHERE EXISTS (SELECT 1
FROM probedata.probe p
WHERE p.template_fk = t.pk AND
p.creation_time >= DATE_SUB(NOW(), INTERVAL 6 MONTH)
);

第二个假设只影响索引。对于此查询,您需要在 probe(template_fk, creation_time) 上建立索引。

如果 template 有宽记录,那么 template(pk, name) 上的索引也可能有用。

这会将执行计划更改为扫描模板表,并使用 probe 表中的索引进行快速查找。不会有额外的处理来删除重复项。

关于mysql - 更高效的内连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36550119/

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