我有这个查询,它返回 7 行并在数据库中花费 4 毫秒,但在实例化时花费 1075 毫秒。这只是时代的一个例子,它因对象而异,但花费这么长时间似乎没有意义。关于如何提高速度的任何指示?
var criteria =
GetSession().CreateSQLQuery(
@"
select circt_id as CircuitId from normal_upstream
where dni_equip_type = 'A'
start with up_equip_stn_no in (:UpStationNo1)
connect by prior equip_stn_no = up_equip_stn_no
union
select circt_id as CircuitId
from normal_upstream
where up_equip_stn_no in (:UpStationNo1)")
.AddScalar("CircuitId", NHibernateUtil.Int32).SetParameterList("UpStationNo1",upstreamStations)
.List<int>()
生成的 SQL 查询
select
circt_id as CircuitId
from normal_upstream
where dni_equip_type = 'A'
start with up_equip_stn_no in (
'B' /* :p0 */)
connect by prior equip_stn_no = up_equip_stn_no
union
select
circt_id as CircuitId
from normal_upstream
where up_equip_stn_no in (
'B' /* :p1 */)
感谢任何帮助。谢谢
最佳答案
显然是 SetParameterList 调用减慢了速度。当我格式化 SQL 之前,我得到了 8ms 数据库和 485ms 实例化的东西,这是可以接受的。我想要更快的东西,但现在就可以了。
这是我目前使用的代码:
var sql =
String.Format(
@"select circt_id as CircuitId from normal_upstream
where dni_equip_type = 'FDR_OCR'
start with up_equip_stn_no in ({0})
connect by prior equip_stn_no = up_equip_stn_no
union
select circt_id as CircuitId
from normal_upstream
where up_equip_stn_no in ({0})",
String.Join(",",upstreamStations.Select(x=>"'"+x+"'").ToArray()));
var criteria =
GetSession().CreateSQLQuery(sql)
.AddScalar("CircuitId", NHibernateUtil.Int32)
.List();
return criteria;
关于c# - List<int> 需要很长时间才能使用 Nhibernate Criteria 进行实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4286473/