我有一个包含大约 100.000 行的表,其中包含一个特定的可为 null 的日期字段,我需要将其转换为多列。这些列可通过 View 访问。
为了简化起见,假设我要连接两个名为 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;
目前的解决方案很耗时,有什么优化吗?
最佳答案
I have a very big table containing about 100.000 rows,
这不是很大 ;)
在 explain (analyze, buffers)
下运行查询以查看时间丢失的位置。
除此之外,我建议使用 extract
而不是 to_char
。
例如extract(YEAR from t1.date)
等。
Extract 是 SQL 标准并返回数字,而不是字符串。这通常是需要的。
有关提取物的更多信息:http://modern-sql.com/feature/extract
关于sql - 在postgres中将日期字段转换为多个字段的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46710284/