Redshift'喜欢'或者' ='运营商偏好

时间:2015-10-26 17:07:27

标签: amazon-redshift

我试图在Redshift搜索的Where子句中找到一些有关喜欢 = 运算符的查询优化信息。示例查询如下:

Select Event, substring(regexp_substr(message, 'Segment=[A-Za-z0-9]*', 1), 9) as 
Segment,
messagetime
from Logs
where message like '%JobType=ProcessVideoSegmentIntoFragmentsJob%'
and (Status='Ingested' OR Status='Started')
and message like '%.ts%'
and messagetime >= DATEADD(DAY, -30, GETDATE())

关于Where子句,我很好奇将进行比较的顺序,特别是 Status = 消息,如。由于在这种情况下like运算符的性能要差得多,我希望在 Status = 之后进行比较。我对下面发布的查询进行了解析:

XN Seq Scan on logs  (cost=0.00..48973188.14 rows=1 width=692)
Filter: (((message)::text ~~
'%JobType=ProcessVideoSegmentIntoFragmentsJob%'::text) AND (((status)::text =
'Ingested'::text) OR ((status)::text = 'Started'::text)) AND (messagetime >=
'2015-09-26 16:19:56'::timestamp without time zone) AND ((message)::text ~~ 
'%.ts%'::text))

据我所知,由于没有使用索引,查询将只执行它认为最高效的内容,但如果这是执行它的顺序,那肯定不是最好的查询计划。

最后,我只需要知道Redshift是否会首先运行喜欢 = 运算符。

1 个答案:

答案 0 :(得分:0)

Amazon Redshift不使用索引。相反,它跨多个节点并行处理数据,并利用数据分发(DISTKEY)和数据排序顺序(SORTKEY)。

因此,可能会评估数据的每一行的那些表达式(但如果WHERE中有SORTKEY条件,则可以减少这种表达式。

SQL性能改进中的一种常见技术是在嵌套SELECT中消除尽可能多的行。这是以特定顺序生成所有SQL数据库评估值的唯一方法。 (某些数据库在此区域中具有其他功能,但它们不是SQL的通用功能。)因此,您可以尝试将Status=检查放入子查询中。

请参阅Redshift文档:Subquery Examples