如何improve/speed向上SQL查询

How to improve/speed up SQL query

我有一个有效的查询,但需要很长时间才能完成 运行。有没有更有效的方法来完成这个?

基本上我想获取位置为 106 的所有行,purchase_date >= 今天 - 300,assigned_worker 包括 Alex 或 Carol。这会生成具有相同 cost_id 的行。每个 cost_id 我只想要一行,并且希望该行是 cost_num.

最高的那一行
select distinct t.cost_id, t.column_a, t.column_b
from mytable t
where  t.location in (106) and t.purchase_date >= today - 300  and (t.assigned_worker like '%Alex%' or d.assigned_worker like '%Carol%' )
and t.cost_num in (select max(cost_num) from mytable where cost_id = t.cost_id
and location in (106));

如果不了解索引和解释计划(以及 - 在我个人的情况下 - Informix),很难找到缓慢的根本原因。很少(注意 - 可能会产生误导!)想法:

  • t.location in (106)替换为t.location = 106
  • locationpurchase_datecost_id
  • 上创建索引
  • 尽可能避免like '%...'
  • 避免 or - 替换为 union
  • 如果 Informix 支持,则将 subselect 替换为 window 函数(提取 row_number() over (partition by location, cost_id order by cost_num desc) 等于 1 的行)
  • 子选择中的别名table和列,至少为了可读性