【发布时间】:2021-02-12 01:28:23
【问题描述】:
我发现了奇怪的东西,查询:
SELECT *
FROM progress as pp
ALL LEFT JOIN links as ll USING (viewId)
WHERE viewId = 'a776a2f2-16ad-448a-858d-891e68bec9a8'
结果:0 rows in set. Elapsed: 5.267 sec. Processed 8.62 million rows, 484.94 MB (1.64 million rows/s., 92.08 MB/s.)
这里修改查询:
SELECT *
FROM
(SELECT *
FROM progress
WHERE viewId = 'a776a2f2-16ad-448a-858d-891e68bec9a8') AS p ALL
LEFT JOIN
(SELECT *
FROM links
WHERE viewId = toUUID('a776a2f2-16ad-448a-858d-891e68bec9a8')) AS l ON p.viewId = l.viewId;
结果:0 rows in set. Elapsed: 0.076 sec. Processed 4.48 million rows, 161.35 MB (58.69 million rows/s., 2.12 GB/s.)
但它看起来很脏。
不应该考虑where条件来优化查询吗?
在此处编写查询的正确方法是什么,如果它将在哪里呢?
然后我尝试添加另一个联接:
SELECT *
FROM
(SELECT videoUuid AS contentUuid,
viewId
FROM
(SELECT *
FROM progress
WHERE viewId = 'a776a2f2-16ad-448a-858d-891e68bec9a8') p ALL
LEFT JOIN
(SELECT *
FROM links
WHERE viewId = toUUID('a776a2f2-16ad-448a-858d-891e68bec9a8')) USING `viewId`) ALL
LEFT JOIN `metaInfo` USING `viewId`,
`contentUuid`;
考虑到我只想将 3 个表与条件选择一行连接起来,结果又很慢:
0 rows in set. Elapsed: 1.747 sec. Processed 9.13 million rows, 726.55 MB (5.22 million rows/s., 415.85 MB/s.)
【问题讨论】:
-
哪个表包含viewId字段?请修正你的语法。之前你放了一个逗号
-
固定逗号,两个表都包含viewId字段
-
您是否忘记使用表的别名来限定 viewid:
WHERE pp.viewId = 'a776a2f2-16ad-448a-858d-891e68bec9a8' -
我刚做了,速度一样。
-
您的问题到底是什么?是关于查询的性能还是关于您没有得到任何结果?
标签: sql clickhouse