fetching records takes a long time
我在Oracle中有一个表,其中有100,869,984条记录。当我在
1 2 3 4 5 6 7 8 | SELECT * FROM E_MW_01MIN_MIT WHERE REPLACE(substr(TO_CHAR (DBTM, 'HH24:MI:SS'), 1, 5), '00:00', '24:00') = '11:01' AND TO_CHAR (DBTM, 'DD-MM-YYYY') = '07-05-1396' AND AVNR = 2075; |
有时第一次运行后,它会更快地获取数据,减少到5秒。
我在DBTM和AVNR上都有一个索引。
如何找出问题所在?
我将nls_date_format更改为我想要的
1 | ALTER SESSION SET nls_date_format = 'DD-MM-YYYY HH24:MI:SS' |
之后,我省略了Select Command中不必要的功能。然后答案在不到0.1秒的时间内出现
时间上的差异可能是由于缓存。
我会将
1 2 3 4 | WHERE REPLACE(substr(TO_CHAR(DBTM, 'HH24:MI:SS'), 1, 5), '00:00', '24:00') = '11:01' AND dbtm >= DATE '1396-05-07' AND dbtm < DATE '1396-05-08' AND avnr = 2075 |
然后我建议在
我不确定第一个条件要执行的操作,但是此索引将根据其余条件进行过滤,这将加快查询的速度。
仅返回一条记录是无关紧要的。这取决于需要扫描多少行或索引条目才能找到它。
假设DBTM上有索引,则搜索一定范围的日期时间应该更快。例如,如果您正在查看\\ '07 -05-1396 11:01 \\'发生的任何事情,那么您将查找> = \\ '07 -05-1396 11:01 \\'和<\\ '07 -05- 1396 11:02 \\'。只需将您的转换放在文字而不是数据库列上,以确保可以使用列上的索引。