例如: 假设我们有一个具有3000万行的分段事务表,当与主表连接时,它具有唯一的(24行)...每小时(1到24)
SELECT F.*
FROM STAGING_TRANSACTION F
JOIN DIM_TIME DT ON DATEPART(HOUR,F.RECORDED_TIME) = DATEPART(HOUR,DT.ON_TIME)
数据类型是 记录时间是DATETIME ON_TIME是十进制
暂存a没有索引,我已经在dim_time上创建了索引,因为它很慢。当staging tabe与其他表连接时,它更快,但是当加入昏暗时间时,需要更长的时间。由于函数在where子句中使用,因此索引不起作用。
还有其他方法可以让它更快
利奥
答案 0 :(得分:0)
这是您的查询:
SELECT F.*
FROM STAGING_TRANSACTION F JOIN
DIM_TIME DT
ON DATEPART(HOUR, F.RECORDED_TIME) = DATEPART(HOUR, DT.ON_TIME) ;
如果您有DIM_TIME
,则应该在维度中包含一个具有相应小时的列。毕竟,它是一个实用工具表。这很容易解决:
alter table dim_time add dt_hour as (datepart(hour, on_time) );
然后,此列的索引可能有助于查询:
create index idx_dim_time_hour on dim_time(dt_hour);
这应该有助于查询:
SELECT F.*
FROM STAGING_TRANSACTION F JOIN
DIM_TIME DT
ON DATEPART(HOUR, F.RECORDED_TIME) = dt.dp_time;
您还可以将计算列添加到staging_transaction
:
alter table staging_transaction add st_hour as (datepart(hour, recored_time) );
create index idx_st_hour on staging_transaction(st_hour);
然后查询如下:
SELECT F.*
FROM STAGING_TRANSACTION F JOIN
DIM_TIME DT
ON f.st_hour = dt.dp_time;