加快sql,加入两列
Posted
技术标签:
【中文标题】加快sql,加入两列【英文标题】:speed up sql, join onto two columns 【发布时间】:2021-11-21 21:13:39 【问题描述】:美好的一天。 我正在根据特定日期、商店和文章加入手头上的库存。 似乎加入时间太长了。
只有一些商店会有一些文章。第1条只在A店有售,B店没有。
我提前知道我查询的是A店的第1条,B店的第2条,因为那是卖的。
与其查询每个商店的两篇文章的库存,如何加快查询速度,我可以只加入特定的组合 A1、B2,是否可以组合 FROM 表中的两列? 谢谢
Q3_SOH AS (
SELECT
CONCAT(Article,"|",Site,"|",Calendar_Day) AS ID,
Site,
Article,
SOH_Cost,
SOH_Qty_EA,
Calendar_Day,
FROM
`gcp-table`
WHERE
Calendar_Day BETWEEN DATE_ADD(startDate, INTERVAL -1 day) AND endDate
AND Site IN (
SELECT DISTINCT Site
FROM Q1)
AND Article IN (
SELECT DISTINCT Article
FROM Q1))
你好,谢谢你的帮助,非常聪明。 我正在使用 GCP bigquery,这些部分是 WITH 的一部分,Q1 获得销售额,Q3 用于库存。 然后加入和编写计算字段相对容易。这个 SOH 表是一个海量数据库。 以这种方式加入似乎并不是一种改进,因为我仍在将所有文章加入所有商店。 我相信所有商店都有文章,但大多数商店的数量为零。 我们可以多次阅读同一篇文章。 我可以写类似的东西
in Q1 CONCAT(Site, Article) as ID
SELECT
site, article, soh_cost, soh_qty, date,
concat(site, article) AS ID
FROM 'gcp-b'
WHERE
concat(site, article) in DISTINCT(Q1.ID)
原来的似乎最快。 花费的时间最少。
【问题讨论】:
我为 mysql 添加了一个标签 - 我假设这是您使用的平台? 您尚未发布完整的查询。请发布完整的查询,指明表大小和索引,最好包括查询计划。IN (SELECT DISTINCT...)
有时可以重写为 WHERE EXISTS
以提高性能,但这取决于您当前的查询计划和索引
缺少什么吗?我不认识这种语法:Q3_SOH AS (
.
网站和文章都来自第一季度?然而你不知道他们配对吗?
【参考方案1】:
你可以使用连接来达到同样的效果
SELECT
CONCAT(Article,"|",Site,"|",B.Calendar_Day) AS ID,
B.Site,
B.Article,
B.SOH_Cost,
B.SOH_Qty_EA,
B.Calendar_Day
FROM `gcp-table` as B
JOIN Q1 as QS ON B.Site = QS.Site
JOIN Q1 as QA ON B.Article = QA.Article
WHERE Calendar_Day BETWEEN DATE_ADD(startDate, INTERVAL -1 day) AND endDate
请注意,如果网站或文章在第一季度出现多次,请按以下方式进行:
SELECT
CONCAT(Article,"|",Site,"|",B.Calendar_Day) AS ID,
B.Site,
B.Article,
B.SOH_Cost,
B.SOH_Qty_EA,
B.Calendar_Day
FROM `gcp-table` as B
JOIN (SELECT DISTINCT SITE FROM Q1) as QS ON B.Site = QS.Site
JOIN (SELECT DISTINCT ARTICLE FROM Q1) as QA ON B.Article = QA.Article
WHERE Calendar_Day BETWEEN DATE_ADD(startDate, INTERVAL -1 day) AND endDate
【讨论】:
以上是关于加快sql,加入两列的主要内容,如果未能解决你的问题,请参考以下文章
ACCESS有一个表,我想根据A列或是C列两列数据中的任意数据进行查询,怎么创建查询? 哪位高人可以指点下