[오라클 CHAR형과문자상수(Literal)비교방법]문자형(CHAR TYPE)고 문자상수(문자리커럴)
비교시 RTRIM을 사용하지마세요
-- char type과 문자상수(문자리터럴)의비교
-- where절에 char컬럼과 문자상수 비교시 절대 rtrim같은 함수를 사용하지 마세요.
-- rtrim을 안해도 문자상수가 char로 변형되어 비교하므로 ...
-- 만약 아래 예문처럼 인덱스컬럼에 rtrim을 쓰면 인덱스를 사용하지 못하므로 성능 저하!
myemp1 테이블은 2000만건 컬럼구조는 다음과 같다.
desc myemp1
이름 유형
--------------------- -------------
EMPNO NOT NULL NUMBER
ENAME VARCHAR2(100)
DEPTNO VARCHAR2(1)
ADDR VARCHAR2(100)
SAL NUMBER
SUNGBYUL VARCHAR2(1)
alter table myemp1 add ename2 char(100)
-- ename값을 ename2로 이동시킴
update myemp1
set ename2 = ename
-- ename2를 검색조건으로 조회, 일단 인덱스없이 해보자.
-- 68초
select * from myemp1 where ename2 = '마길동444'
-- 이번에는 ename2로 인덱스를 생성한 후 다시 조회하자.
create index idx_myemp1_ename2 on myemp1(ename2)
-- 0초
select * from myemp1 where ename2 = '마길동444'
-- ename2컬럼이 char(100)라고 해서 우측공백을 제거하기 위해 rtrim을 사용하면 안된다
-- 인덱스를 사용하지 못하므로 어마어마한 시간이 걸린다.
-- rtrim을 사용안해도 '마길동444'가 char(100)형태로 자동 변환되어 비교된다.
-- 67초
select * from myemp1 where rtrim(ename2) = '마길동444' (잘못된 쿼리)
열공하세요~
-- char type과 문자상수(문자리터럴)의비교
-- where절에 char컬럼과 문자상수 비교시 절대 rtrim같은 함수를 사용하지 마세요.
-- rtrim을 안해도 문자상수가 char로 변형되어 비교하므로 ...
-- 만약 아래 예문처럼 인덱스컬럼에 rtrim을 쓰면 인덱스를 사용하지 못하므로 성능 저하!
myemp1 테이블은 2000만건 컬럼구조는 다음과 같다.
desc myemp1
이름 유형
--------------------- -------------
EMPNO NOT NULL NUMBER
ENAME VARCHAR2(100)
DEPTNO VARCHAR2(1)
ADDR VARCHAR2(100)
SAL NUMBER
SUNGBYUL VARCHAR2(1)
alter table myemp1 add ename2 char(100)
-- ename값을 ename2로 이동시킴
update myemp1
set ename2 = ename
-- ename2를 검색조건으로 조회, 일단 인덱스없이 해보자.
-- 68초
select * from myemp1 where ename2 = '마길동444'
-- 이번에는 ename2로 인덱스를 생성한 후 다시 조회하자.
create index idx_myemp1_ename2 on myemp1(ename2)
-- 0초
select * from myemp1 where ename2 = '마길동444'
-- ename2컬럼이 char(100)라고 해서 우측공백을 제거하기 위해 rtrim을 사용하면 안된다
-- 인덱스를 사용하지 못하므로 어마어마한 시간이 걸린다.
-- rtrim을 사용안해도 '마길동444'가 char(100)형태로 자동 변환되어 비교된다.
-- 67초
select * from myemp1 where rtrim(ename2) = '마길동444' (잘못된 쿼리)
열공하세요~
오라클자바커뮤니티교육센터, 개발자전문교육, 개인80%환급
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(7/21)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(7/21)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/21)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(7/21)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/28)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/28)[기업100%환급]안드로이드개발자과정
(7/28)[기업100%환급]SQL기초에서 Schema Object까지
평일야간(19:00~21:50) 개강
(7/21)웹퍼블리싱 마스터
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/22)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/24)SQL기초에서실무까지
(7/29)안드로이드개발자과정
(7/29)Spring3.X, MyBatis, Hibernate실무과정
(8/05)MyBatis3.X, Hibernate4.X ORM실무과정
주말(10:00~17:50) 개강
(7/19)JSP,Ajax,jQUERY,Spring,MyBatis,Hibernate속성과정
(7/19)SQL초보에서 Schema Object까지
(7/19)C#,ASP.NET마스터
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)웹퍼블리싱 마스터
(7/19)안드로이드개발자과정
(7/26)개발자를위한PLSQL,SQL튜닝,힌트
(8/02)MyBatis3.X, Hibernate4.X ORM실무과정
(8/09)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(8/23)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
주말저녁(18:30~22:20) 개강
(8/02)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지
www.oraclejavacommunity.com
평일주간(9:30~18:10) 개강
(7/21)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(7/21)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(7/21)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
(7/21)[채용예정교육]오라클자바개발잘하는신입뽑기프로젝트,교육전취업확정
(7/28)[기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍
(7/28)[기업100%환급]안드로이드개발자과정
(7/28)[기업100%환급]SQL기초에서 Schema Object까지
평일야간(19:00~21:50) 개강
(7/21)웹퍼블리싱 마스터
(7/22)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(7/22)닷넷(C#,Network,ADO.NET,ASP.NET)마스터과정
(7/24)SQL기초에서실무까지
(7/29)안드로이드개발자과정
(7/29)Spring3.X, MyBatis, Hibernate실무과정
(8/05)MyBatis3.X, Hibernate4.X ORM실무과정
주말(10:00~17:50) 개강
(7/19)JSP,Ajax,jQUERY,Spring,MyBatis,Hibernate속성과정
(7/19)SQL초보에서 Schema Object까지
(7/19)C#,ASP.NET마스터
(7/19)Spring3.X, MyBatis, Hibernate실무과정
(7/19)웹퍼블리싱 마스터
(7/19)안드로이드개발자과정
(7/26)개발자를위한PLSQL,SQL튜닝,힌트
(8/02)MyBatis3.X, Hibernate4.X ORM실무과정
(8/09)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(8/23)JAVA,Network&WEB&Framework(자바기초에서웹스프링까지)
주말저녁(18:30~22:20) 개강
(8/02)JAVA,Network&WEB&Framework
(8/09)SQL기초에서실무까지
댓글 없음:
댓글 쓰기