我有一个包含大约100.000行的表,其中包含一个特定的可为空的日期字段,我需要将其转换为多列。这些列可以通过视图访问。
为了简化目的,假设我正在加入两个名为tab1和tab2的表,除了tab1的日期字段外,这两个表的内容并不重要
到目前为止,我到达的解决方案如下:
create view result_view as
select to_char(t1.date, 'YYYY') AS year,
to_char(t1.date, 'MM') AS month,
to_char(t1.date, 'YYYY-MM-DD') AS day,
t2.value as value
from tab t1 left join tab2 t2 on t1.id = t2.id;
当前的解决方案需要花费很多时间,还有任何优化?
答案 0 :(得分:2)
我有一个非常大的表,包含大约100.000行,
那不是很大;)
在explain (analyze, buffers)
下运行查询以查看时间丢失的位置。
除此之外,我建议使用extract
代替to_char
。
E.g。 extract(YEAR from t1.date)
等。
Extract是SQL标准并返回数字,而不是字符串。这通常是想要的。
有关提取的更多信息:http://modern-sql.com/feature/extract