问题描述
我无法参数化我们的查询,因为我们的数据库架构在关键字域上使用了很多CHAR类型,但是被告知使用LIKE运算符而不是 =。这确实允许参数化查询工作,但我担心这将如何影响性能?
专家解答
Ug.字符 :(
假设你的意思是你没有用空格填充变量,并做一些类似的事情:
比起性能,我更关心正确性!一般来说,这些不会返回相同的结果:
不过,您可能仍然会遇到性能问题。等式 (=) 之类的基数计算是不同的。所以你最终可能会不同于使用 =。这不一定是一件坏事。但这也不好。
假设您无法 (轻松地) 摆脱字符,则将变量填充或将其转换为适当的长度。然后使用 = 进行比较。
假设你的意思是你没有用空格填充变量,并做一些类似的事情:
where char_col like :var || '%'
比起性能,我更关心正确性!一般来说,这些不会返回相同的结果:
create table t (
x char(10)
);
insert into t values ('test');
insert into t values ('testtest');
var v varchar2(10);
exec :v := 'test';
select * from t
where x = :v;
no rows selected
select * from t
where x like :v || '%';
X
----------
test
testtest
select * from t
where x = cast(:v as char(10));
X
----------
test 不过,您可能仍然会遇到性能问题。等式 (=) 之类的基数计算是不同的。所以你最终可能会不同于使用 =。这不一定是一件坏事。但这也不好。
假设您无法 (轻松地) 摆脱字符,则将变量填充或将其转换为适当的长度。然后使用 = 进行比较。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




