我遇到了一件非常奇怪的事情。
在Oracle DB
我有三张桌子。 Tab1
和Tab2
具有相同的结构和索引以及大约20K行。 Tab3
有大约15M行和FK
到Tab1
。
我有这个问题:
SELECT t3.* FROM tab3 t3, tab1 t1 WHERE -- JOIN conditions and a few more
从我.Net
应用Oracle.DataAccess.Client
和System.Data.OleDb
开始执行30 seconds
。
如果我使用tab2
代替tab1
运行相同的查询,则System.Data.OleDb
执行相同的方式,但Oracle.DataAccess.Client
需要大约1,5 minutes
。
修改
我最近发现了确切的结果。其中一个where子句是日期列。
对于我使用的参数:DbType.DateTime
创建了一个OracleDbType
和OracleDbTypeEx
TimeStamp
的参数。
如果我使用DbType.Date
,OracleDbType
和OracleDbTypeEx
都是Date
。在这种情况下,即使使用Oracle.DataAccess.Client
提供程序,性能也是正确的。