SELECT DISTINCT af.ID, af.nom_flux, st.chemin_stockage, af.hash_flux
FROM signature sig
INNER JOIN stockage st ON st.id_flux = sig.id_flux AND st.date_statut_stockage >= sysdate - 100
INNER JOIN allotissement_flux af ON af.ID = sig.id_flux
WHERE sig.date_statut_signature >= sysdate - 100
AND sig.statut_signature = 'A_SIGNER'
AND st.statut_stockage = 'OUI'
AND sig.nb_appel_service_signature < 4 ;
上面的查询返回5222行,在本地运行只需0.63秒。我想知道它是不是尽可能快,或者我是否可以进一步调整它,因为这个数据集将随着时间的推移快速增长。
我在速度不变的情况下尝试过的事情:
1-更改联接顺序,从最小表联接到最大表。
2-向af.id添加索引。
2条答案
按热度按时间cygmwpex1#
将连接表移出主查询:
omvjsjqw2#
首先,你应该替换
DISTINCT
与WINDOW
条款。此外,还可以对sql进行一些重构,以提高其性能。因为您没有从中选取任何列
signature
但是,您正在基于此表筛选某些记录。让我们在连接自身时应用这些过滤器。它可能会带来一些改善执行时间。示例sql-