日期字段条件为何直接传日期变量比TO_DATE()传字符串慢10倍
日期字段条件为什么直接传日期变量比TO_DATE()传字符串慢10倍?
语句1
语句2
对于语句1用
java.sql.Timestamp bTime = xxxx
java.sql.Timestamp eTime = xxxxxxxx
PreparedStatement sta = con.prepareStatement(sql);
stmt.setTimestamp(...
stmt.setTimestamp(...
对于语句2用
String bTime = formatter.format(...
String eTime = formatter.format(
PreparedStatement sta = con.prepareStatement(sql);
stmt.setString(...
stmt.setString(...
结果语句1查询时间在10秒,语句2在1秒以下。
------解决思路----------------------
分别在后台找到语句对应的sql_id
在v$sql_plan中找出执行计划来进行比较
------解决思路----------------------
两个语句交替执行: 语句1 语句2 语句1 语句2 你看看这四个时间
------解决思路----------------------
LZ ,你这张表的 date1 字段,是日期型的。
语句1 :
where date1 >= ? and date1 <= ?
传入的参为字符串型,这里存在着了一个隐式的数据转换,把 date1 先转成了字符串型,再去比较 ,浪费了大量时间。
语句2:
where date1 >= to_date(?,'yyyy-MM-dd HH24:mi:ss') and date1 <= o_date(?,'yyyy-MM-dd HH24:mi:ss')
这里,你直接传入了日期型,不存在转换,直接比较。
PS:你这张表的数据,是不是数据量比较大,比如,超过了 10W 行?
语句1
select *
from table1
where date1 >= ? and date1 <= ?
语句2
select *
from table1
where date1 >= to_date(?,'yyyy-MM-dd HH24:mi:ss') and date1 <= o_date(?,'yyyy-MM-dd HH24:mi:ss')
对于语句1用
java.sql.Timestamp bTime = xxxx
java.sql.Timestamp eTime = xxxxxxxx
PreparedStatement sta = con.prepareStatement(sql);
stmt.setTimestamp(...
stmt.setTimestamp(...
对于语句2用
String bTime = formatter.format(...
String eTime = formatter.format(
PreparedStatement sta = con.prepareStatement(sql);
stmt.setString(...
stmt.setString(...
结果语句1查询时间在10秒,语句2在1秒以下。
------解决思路----------------------
分别在后台找到语句对应的sql_id
在v$sql_plan中找出执行计划来进行比较
------解决思路----------------------
两个语句交替执行: 语句1 语句2 语句1 语句2 你看看这四个时间
------解决思路----------------------
LZ ,你这张表的 date1 字段,是日期型的。
语句1 :
where date1 >= ? and date1 <= ?
传入的参为字符串型,这里存在着了一个隐式的数据转换,把 date1 先转成了字符串型,再去比较 ,浪费了大量时间。
语句2:
where date1 >= to_date(?,'yyyy-MM-dd HH24:mi:ss') and date1 <= o_date(?,'yyyy-MM-dd HH24:mi:ss')
这里,你直接传入了日期型,不存在转换,直接比较。
PS:你这张表的数据,是不是数据量比较大,比如,超过了 10W 行?