【发布时间】:2021-06-19 22:43:00
【问题描述】:
我使用下面的查询来使用连接条件,它需要更多的时间来运行并且查询的成本也越来越高。 我没有任何线索可以替换任何操作员。 任何人都可以建议最佳查询以使其表现良好
select column1 as start_1, column2 as end_2
from table1 a cross join table2 b
where a.key = b.id
and (b.id_number LIKE '%123%')
and (a.tye IN (203, 201))
and (b.process_typ not LIKE '%G%');
【问题讨论】:
-
能贴一下表定义、索引定义和查询计划吗?使用包含前导通配符和尾随通配符的谓词可能不太可能做很多事情。根据数据的实际情况,您也许可以使用 Oracle Text 对字符串进行标记,但仅根据列名这看起来不太可能。
-
这不是交叉连接,而是内部连接,因为
WHERE子句。您无法优化此查询,因为您的LIKE逻辑两边都有通配符(不可搜索)。 -
此外,否定谓词(例如 NOT LIKE; NOT IN; !=)往往会阻止优化器使用索引。不幸的是,有很多事情对这个查询起作用。
标签: sql oracle query-optimization