首先,我要去使用表的別名重寫它,這樣我就可以讀它:
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);
讓我做兩個假設:
name
是static.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
表中的索引快速查找模板表的掃描。將不會有額外的處理來刪除重複項。
你可以在'template_fk'創建一個索引 –
'creation_time'從哪裏來? –
@JohnBoker probedata.probe –