暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 查询字符列的性能

askTom 2017-08-22
284

问题描述

我无法参数化我们的查询,因为我们的数据库架构在关键字域上使用了很多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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论