让我们通过散列(稍微修改一下MySQL版本的)来分析最简单的解析示例:
CREATE TABLE t1 (
id INT,
year_col INT
);
ALTER TABLE t1
PARTITION BY HASH(year_col)
PARTITIONS 8;
假设我们有上百万的记录。问题是--如果有一个特定的查询(例如SELECT * FROM t1 WHERE year_col = 5),那么MySQL如何知道要查找哪个分区?有8个分区。我猜哈希函数是计算出来的,MySQL识别出它与分区键匹配,然后MySQL知道是哪一个。但是SELECT * FR
我有一个使用相同子查询两次的SQL脚本(目前运行在SQLite上,但它可能会对任何DB引擎运行),而且由于它可能会获取很多记录(该表有几百万行),所以我只想调用它一次。
查询的缩短伪版本如下所示:
SELECT * FROM
([the subquery, returns a column of ids]) AS sq
[a couple of joins, that fetches things from other tables based on the ids]
WHERE thisorthat NOT IN ([the subquery again])
我尝试过以各种方式使用名
这是对问题的跟进.
让我们假设我有一个数据集,大约是100万行。在我们使用的当前数据库(mysql)中,聚合查询运行得非常慢,可能需要10s左右的复杂聚合。在BigQuery上,如果我们需要在1s或以下返回查询,所需的初始化时间可能会使这个查询花费3秒左右,比mysql要好,但是如果我们需要在1s或以下返回查询,则是错误的作业工具。
那么,我的问题是,在中等大小的数据集(如1-10百万行)上使用BigQuery进行聚合查询,有什么好的选择呢?一个示例查询可能是:
SELECT studio, territory, count(*)
FROM mytable
GROUP BY studio, t