什么是更快的LAG(列)或在变量中保存游标的最后一个值?

时间:2017-06-30 16:03:56

标签: sql oracle

基本上问题是什么。我有这个sql

select 
LAG(ID_ESTADO) over(order by ID_EXPEDIENTE,orden) ULTIMO_IDESTADO,
LAG(ID_EXPEDIENTE) over(order by ID_EXPEDIENTE,orden) ULTIMO_EXPEDIENTE,
LAG(TABLA) over(partition by ID_EXPEDIENTE order by orden) ULTIMA_TABLA,
LAG(TIPO_ESTADO) over(partition by ID_EXPEDIENTE order by orden) ULTIMO_ESTADO,
LAG(FECHA_ESTADO) over(partition by ID_EXPEDIENTE order by orden) ULTIMA_FECHA,
LAG(ID_EXPEDIENTE,2) over(order by ID_EXPEDIENTE,orden) INMANT_EXPEDIENTE,
LAG(TABLA,2) over(partition by ID_EXPEDIENTE order by orden) INMANT_TABLA,
LAG(TIPO_ESTADO,2) over(partition by ID_EXPEDIENTE order by orden) INMANT_ESTADO,
ID_ESTADO,
ID_EXPEDIENTE,
TABLA,
TIPO_ESTADO,
orden,
anio,
fecha_estado,
NUMERO_EXPEDIENTE,
ANIO_EXPEDIENTE,
NATURALEZA_EXPEDIENTE, 
ID_OFICINA,
DESCRIPCION,
ID_TIPO_INSTANCIA, 
ID_OBJETO_JUICIO,
DESC_OBJETO_JUICIO,
FECHA_INICIO,
ID_EXPEDIENTE_ORIGEN,
CARATULA_EXPEDIENTE
from EST_ESTADOS_CIVIL e where TABLA like 'R%' and ANIO between 2012 and 
2016

我想知道如果比较这样的游标中的值会更快,比如TIPO_ESTADO = ULTIMO_ESTADO

或单独使用查询并从变量中获取LAG值并进行比较。

请记住,更改此项会将我的查询从280.000行更改为300万行。

我可以保留280.000行但我至少需要包含一个或两个LAG列

1 个答案:

答案 0 :(得分:2)

与所有关于性能的问题一样,您可以测试代码以查看哪个更好。

至于我的观点,我甚至不会考虑使用游标来提高性能。基于集合的数据操作应该更好。

注意:如果您使用光标,则需要一个order by,这可能会扼杀您可能认为会获得的预期性能提升。