我在我的工作场所找到了这个sql文件
DECLARE
M_DEPATURE_TIME varchar;
BEGIN
SELECT min(cast(to_char(i.departuredate,'DD-Mon-YYYY') as varchar) ||' '|| i.departuretime) as deptime
INTO M_DEPATURE_TIME
FROM myschema.flightinfosv i
WHERE upper(i.inout) = upper(m_inout)
AND i.r_id= m_resconfirmid;
RETURN M_DEPATURE_TIME;
END;
问题是为什么这个脚本需要花费更多的时间(超过15分钟)才能在数千个记录表中执行。表(resflightinfosv)至少包含50,000条记录。虽然我使用'inout'和'的索引r_id',当执行甚至1000限制时,将花费那段时间。我需要更改此脚本的地方?
提前致谢!
答案 0 :(得分:1)
您可以在departuredate
和departuretime
上添加多列索引并尝试这样的操作;首先提取最小日期,然后在此日期选择最小的小时。我不认为下面的代码会“按原样”工作,因为我无法测试它,但你得到了主要的想法:)
DECLARE
M_DEPATURE_DATE date,
M_DEPATURE_TIME varchar;
BEGIN
SELECT min(i.departuredate) as depdate
INTO M_DEPATURE_DATE
FROM myschema.flightinfosv i
WHERE upper(i.inout) = upper(m_inout)
AND i.r_id= m_resconfirmid;
SELECT to_char(i.departuredate,'DD-Mon-YYYY') ||' '|| min(i.departuretime) as deptime
INTO M_DEPATURE_TIME
FROM myschema.flightinfosv i
WHERE upper(i.inout) = upper(m_inout)
AND i.r_id= m_resconfirmid
AND i.departuredate = M_DEPATURE_DATE
RETURN M_DEPATURE_TIME;
END;