当前位置: 首页 > 面试题库 >

Google BigQuery查询速度很慢

贺彬
2023-03-14
问题内容

我正在使用Google BigQuery,并且正在从PHP执行一些简单的查询。(例如,从电子邮件中的SELECT * WHERE
email='mail@test.com‘)我只是在检查表中是否存在该电子邮件。

表“电子邮件”目前为空。但是,PHP脚本仍然需要大约4分钟的时间来检查一个空表上的175封电子邮件。.如我希望将来该表将被填充,并且将有500
000封邮件,那么我想请求时间会更长。

那正常吗?还是有什么想法/解决方案来缩短检查时间?

(PS:表“电子邮件”仅包含8列,均为字符串类型)

谢谢 !


问题答案:

如果仅检查字段的存在,请考虑使用SELECT COUNT(*) FROM emails where email='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.com
mail2@test.com
mail3@test.com

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

email            found
______________   _____
mail1@test.com   true
mail2@test.com   false
mail3@test.com   true

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



 类似资料:
  • 问题内容: 我有一个PostgreSQL函数,可以将查询结果返回到pgadmin结果网格中。在内部,这是一个简单的函数,使用a连接到另一个数据库并返回查询,以便我可以简单地运行 它的运行就像基本的表查询一样。 问题是当我使用该子句时。因此,我想运行以下查询,但它要花很多时间: 我怎样才能加快速度?有什么比这种情况下的子句快的吗? 问题答案: 不是表-可能是一些存储过程,因此查询并不是很简单。您需要

  • `public class Main{private static Connection connect=null;private static Statement PreparedStatement=null;private static ResultSet ResultSet=null;

  • 问题内容: (重要)编辑3: 单独运行testajax2.php而 _不是_Ajax。持续时间大致相同,为1.02-1.03秒。所以我想这意味着问题出在PHP- MySQL或XAMPP中? 当我通过phpMyAdmin查询运行它时,结果如下:显示第0-29行(总计约50行。查询用时 0.0015秒 )。看来问题根本不在于Ajax,而可能在于PHP。我怎样才能解决这个问题?(我也刚刚编辑了问题标题。

  • 问题内容: 这是查询(最大的表约有40,000行) 如果运行此命令,它将很快执行(大约.05秒)。它返回13行。 当我在查询末尾添加一个子句(按任意列排序)时,查询大约需要10秒钟。 我现在正在生产中使用此数据库,并且一切正常。我所有其他查询都很快。 有什么想法吗?我在MySQL的查询浏览器中并从命令行运行了查询。两个地方都死了。 编辑: Tolgahan ALBAYRAK解决方案有效,但是谁能解

  • 问题内容: 我已经开发了一个用户批量上传模块。有两种情况,当数据库有零条记录时,我批量上传了20000条记录。大约需要5个小时。但是,当数据库已经有大约30 000条记录时,上传速度将非常缓慢。上载2万条记录大约需要11个小时。我只是通过fgetcsv方法读取CSV文件。 下面是运行的查询。(我正在使用Yii框架) 如果存在,请更新用户: 如果用户不存在,请插入新记录。 表引擎类型为MYISAM。

  • 现在有三台ES服务器,索引里大概有7000条数据,每条数据是内容放到txt中大概300kb以上,按某个查询条件查询的结果数量是4000多条数据。当size设置成9999的时候,需要查询30秒以上,这是为什么呢,有没有优化方案。