【发布时间】:2019-02-11 09:56:40
【问题描述】:
我的问题基本上是:如何告诉我的数据库在第一次匹配我的 WHERE 条件后进行 seq 扫描并停止?
假设我想找到某种类型的第一个事件,我可以编写以下查询:
select *
from installs
where country = 'China'
order by install_date
limit 1
这里的问题是,引擎会根据操作顺序扫描所有表并生成与我的过滤器匹配的数据集,然后对该数据集进行排序(成本巨大),然后仅返回第一行。
我当然可以按特定日期进行过滤,但假设我不知道要过滤的时间段 - 如何在 Amazon Redshift 中优化这种类型的查询(可能在 where 子句中)?
【问题讨论】:
-
如果您没有办法在
install_date上创建索引(或安排其他一些字段,例如记录ID 遵循相同的顺序),您无能为力。数据库必须检索和排序所有匹配的记录。 -
您可以使用 install_date 作为表格的排序键。
-
除非查看所有
install_date,否则数据库应该如何知道哪个是最小的? -
您可以使用排序键做您想做的事情:docs.aws.amazon.com/redshift/latest/dg/…。
-
这是您尝试执行的实际查询的示例吗?如果是,那么 Redshift 可能不适合您。如果您的行数少于 100,000,000 行,那么您可能会发现标准 Postgres 数据库足以满足您的需求。
标签: sql amazon-web-services amazon-redshift sqlperformance