검색할 컬럼의 이름과 과 검색값을 지정해서 쿼리를 실행했는데 너무 느리군요. 0 4 2,950

by 끌루니 [SQL Query] 컬럼 검색 DECODE [2013.03.06 17:27:34]


예를 들어서 검색할 컬럼과 검색텍스트를 넣어서 검색하는 조건입니다.

-- :SEARCH_CONDITION - 검색조건 컬럼(A_COL, B_COL, C_COL)
-- :SEARCH_TEXT          - 검색어 (AAA)

검색조건컬럼(:SEARCH_CONDITION) 에 A_COL 이 들어오면 :SEARCH_TEXT 를 검색해오는 쿼리를
DECODE를 활용해서 만들었는데 

너무 느리게 뜨는구요.

다른 해결방법이 없을까요?


SELECT *
FROM TEST_TABLE 
WHERE A_COL = DECODE(:SEARCH_CONDITION ,'A_COL', SEARCH_TEXT, A_COL)
        AND B_COL = DECODE(:SEARCH_CONDITION ,'B_COL ', SEARCH_TEXT, B_COL )
        AND C_COL = DECODE(:SEARCH_CONDITION ,'C_COL ', SEARCH_TEXT, C_COL )
by 아발란체 [2013.03.06 18:02:23]
DECODE 대신 값을 직접 박으면 속도가 빨라지나요? @.@)ㆀ
별 차이 없어보이는데.

해당 테이블 인덱스 스크립트를 올려주시겠어용? @.@)/

by spencer [2013.03.07 05:26:32]
이렇게 한번 해 보면 어떨까요?

SELECT *
FROM TEST_TABLE 
WHERE (:SEARCH_CONDITION ='A_COL' AND A_COL = :SEARCH_TEXT)
OR (:SEARCH_CONDITION ='B_COL' AND B_COL = :SEARCH_TEXT)
OR (:SEARCH_CONDITION ='C_COL' AND C_COL = :SEARCH_TEXT)

by 마농 [2013.03.07 09:57:44]
-- 1. OR & use_concat 힌트
SELECT /*+ use_concat */ *
  FROM test_table 
 WHERE (:search_condition = 'a_col' AND a_col = :search_text)
    OR (:search_condition = 'b_col' AND b_col = :search_text)
    OR (:search_condition = 'c_col' AND c_col = :search_text)
;
-- 2. Union All
SELECT *
  FROM test_table 
 WHERE (:search_condition = 'a_col' AND a_col = :search_text)
 UNION ALL
SELECT *
  FROM test_table 
 WHERE (:search_condition = 'b_col' AND b_col = :search_text)
 UNION ALL
SELECT *
  FROM test_table 
 WHERE (:search_condition = 'c_col' AND c_col = :search_text)
;
-- 3. Dynamic SQL
-- Pl/SQL 에서 사용 예시. 자세한 사항은 아래 URL 참고
-- http://www.gurubee.net/article/19612
v_sql := 'SELECT * FROM test_table';
v_sql := v_sql || ' WHERE ' || search_condition || ' = :search_text';
OPEN record_set FOR v_sql USING search_text;

by 끌루니 [2013.03.08 13:05:02]
모두들 감사합니다.
그런데 여기 업체에서는 성능때문에 다른 포맷을 써야한다는군요.
그냥 그쪽 쿼리에 맞춰서 짤려고 하고 있습니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입