Php 在一个查询中使用3个like语句的速度问题(oracle)

Php 在一个查询中使用3个like语句的速度问题(oracle),php,sql,oracle,performance,sql-like,Php,Sql,Oracle,Performance,Sql Like,这是我的查询的一个片段: and ( ADDR_FULLTEXT like upper(:streets1) ) 每当我执行这个查询时,它都会在大约0.05秒内执行。这太完美了! 但是,当我执行以下操作时: and ( ADDR_FULLTEXT like upper(:streets1) AND ADDR_FULLTEXT like upper(:streets2) ) 它会导致一个20秒的查询。为什么差异如此之大,如何解决这个问题

这是我的查询的一个片段:

and (
    ADDR_FULLTEXT
    like upper(:streets1)
)
每当我执行这个查询时,它都会在大约0.05秒内执行。这太完美了! 但是,当我执行以下操作时:

and (
    ADDR_FULLTEXT
    like upper(:streets1)
    AND
    ADDR_FULLTEXT
    like upper(:streets2)
)
它会导致一个20秒的查询。为什么差异如此之大,如何解决这个问题

查询的其余部分基本上是从一个视图中选择多个字段(ADDR_FULLTEXT就是其中之一)。 还有一个就像这个

也许我在这里做错了什么,也许有更好的方法


仅供参考:PHP循环生成此查询,它是搜索查询分解的结果。在这个查询中,每个单词都会被解析,从而在一个查询中产生一个或多个相同的“like”。另一个like是以相同的方式生成的,但它始终是1 like,从不多,从不少。

可能您将对每个like语句进行一次完整的表扫描,其余查询使用索引。

尝试将其分解为两个不同的查询,并进行交叉,如:

SELECT * FROM YourTable WHERE ADDR_FULLTEXT like upper(:streets1)
INTERSECT
SELECT * FROM YourTable WHERE ADDR_FULLTEXT like upper(:streets2)

请参见

对该谓词的更改可能会更改CBO对表返回的行数的估计。这反过来可能会导致计划的重大重组,从而导致绩效的变化


进一步的分析将需要等待您提供查询(包括视图)和查询计划。

您可以发布两个版本的SQL语句的查询计划吗?ADDR\u全文未编制索引。它由6个不同的文本字段组合而成,这些字段被编入索引。这一切都发生在一个视图中。不幸的是,我不得不坚持这一点,因为数据库中的数据不一致,所以确实存在无法避免的全表扫描。因此,我需要使用替换。查询不是问题,数据库数据(不在我的控制范围内)是。谢谢大家的帮助。