Sql 使用“选择查询时替换”查询时间过长
我试图在select子查询中使用Sql 使用“选择查询时替换”查询时间过长,sql,firebird,Sql,Firebird,我试图在select子查询中使用REPLACE函数,但它花费的时间太长。如果在子查询中不使用REPLACE,速度会快得多。我需要使用REPLACE将订单id从.001更改为.000以进行第一次选择 快速加载的示例 select product from orders where order_id in (select order_id from orders where customer_id = 10) 我正
REPLACE
函数,但它花费的时间太长。如果在子查询中不使用REPLACE
,速度会快得多。我需要使用REPLACE
将订单id从.001更改为.000以进行第一次选择
快速加载的示例
select product
from orders
where order_id in (select order_id
from orders
where customer_id = 10)
我正在尝试,但需要很长时间才能加载
select product
from orders
where order_id in (select REPLACE(order_id,'.001','.000') as order_id_new
from orders
where customer_id = 10)
我做错什么了吗?试试这个:
select product
from orders
where REPLACE(order_id,'.000','.001') in (select order_id as order_id_new
from orders
where customer_id = 10)
请注意,REPLACE函数的第2个和第3个参数是交换的。首先,您的问题中遗漏了一些有关您的情况的信息
varchar
,char
,textblob
)李>
查询计划
在Interbase/Firebird中的大型列表上效果不佳,通常最好用连接表替换。有时甚至使用全局临时表
来保存ID列表
试试这个:
With O2 as (
select DISTINCT REPLACE(order_id,'.001','.000') as order_id
from orders
where customer_id = 10
)
Select O1.product
from orders O1
join O2 on O1.order_id = O2.order_id
我不知道“索引扫描”和“索引搜索”之间的区别是什么
这里有两个链接可供阅读
后者是俄语,由Firebird核心开发人员于2006年编写。我相信它被翻译成了英语,但没有找到。通过使用REPLACE阅读它。如果您将查询设置为非SARGableOK,您是否推荐其他内容?示例数据、所需结果和逻辑解释会有所帮助。两个查询是否返回相同的行数?@LukaszSzozda:第二个查询仍然可以使用orders.order_id
上的索引(如果适用)。