栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Google BigQuery查询速度很慢

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Google BigQuery查询速度很慢

如果仅检查字段的存在,请考虑使用

SELECt COUNT(*) FROM emails whereemail='mail@test.com'
代替。这将只需要读取一个字段,因此将花费更少,并且在大型表上会更快。

就像Pentium10建议的那样,请考虑在单个查询中使用多个查询。您可以这样做:

SELECt SUM((IF(email = 'mail1@test.com', 1, 0)) as m1,       SUM((IF(email = 'mail2@test.com', 1, 0)) as m2,       SUM((IF(email = 'mail3@test.com', 1, 0)) as m3,       ... FROM emails

您将在单个查询中受限于诸如64k之类的内容,但是它应该非常快速地进行计算,因为它只需要在一次扫描中扫描单个列即可。

或者,如果您希望每行发送一封电子邮件,则可以做一些更奇特的操作,例如

 SELECt email FROM emails WHERe email IN ('mail1@test.com', 'mail2@test.com', 'mail3@test.com'...) GROUP BY email

作为进一步的优化,您可以将其作为LEFT JOIN来完成:

SELECt t1.email as email, IF(t2.email is not null, true, false) as found FROM [interesting_emails] t1  LEFT OUTER JOIN [emails] t2 ON t1.email = t2.email

如果funous_emails包含您要检查的电子邮件列表,例如

mail1@test.commail2@test.commail3@test.com

如果电子邮件表仅包含mail1 @和maiil2 @,那么您将得到以下结果:

email found______________   _____mail1@test.com   truemail2@test.com   falsemail3@test.com   true

这样做的好处是,如果需要,它可以扩展到数十亿封电子邮件(当数量增加时,您可以考虑使用JOIN EACH而不是JOIN)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/670479.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号