日期与数字数据类型比较时性能低下
Slow performance with date comparison with number datatype
Select * from table
WHERE to_date(a.date_key, 'YYYY-MM-DD') BETWEEN to_date('&date3', 'YYYY-MM-DD') AND to_date('&date4', 'YYYY-MM-DD');
这里 a.date_key 是一个数字,我正在更改格式。但是应用上述过程会降低性能。
这是正确的做法还是我们可以用不同的方式让它变得更好。
如有任何帮助,我们将不胜感激。
这不是最好的方法。假设 date_key
是 YYYY-MM-DD 形式的字符串,然后将比较作为字符串:
WHERE a.date_key BETWEEN '&date3' AND '&date4'
比较会很准确,Oracle 可以在 date_key
上使用索引、分区和统计信息。
这引出了一个问题,为什么您有一个密钥而不是使用 date
数据类型。但那是另一个问题。
由于您的数字列是 YYYY-MM-DD 格式,您可以直接使用它们,如下所示:
SELECT * FROM your_table
WHERE
A.DATE_KEY BETWEEN '&date3' AND '&date4'
Here a.date_key is a number
如果真的是数字,你可以简单地使用
where a.date_key between 19810101 and 19891231
Select * from table
WHERE to_date(a.date_key, 'YYYY-MM-DD') BETWEEN to_date('&date3', 'YYYY-MM-DD') AND to_date('&date4', 'YYYY-MM-DD');
这里 a.date_key 是一个数字,我正在更改格式。但是应用上述过程会降低性能。
这是正确的做法还是我们可以用不同的方式让它变得更好。
如有任何帮助,我们将不胜感激。
这不是最好的方法。假设 date_key
是 YYYY-MM-DD 形式的字符串,然后将比较作为字符串:
WHERE a.date_key BETWEEN '&date3' AND '&date4'
比较会很准确,Oracle 可以在 date_key
上使用索引、分区和统计信息。
这引出了一个问题,为什么您有一个密钥而不是使用 date
数据类型。但那是另一个问题。
由于您的数字列是 YYYY-MM-DD 格式,您可以直接使用它们,如下所示:
SELECT * FROM your_table
WHERE
A.DATE_KEY BETWEEN '&date3' AND '&date4'
Here a.date_key is a number
如果真的是数字,你可以简单地使用
where a.date_key between 19810101 and 19891231