database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 6996 게시물 읽기
No. 6996
postgresql bit연산과 ibatis 관련 질문입니다.
작성자
zxcasd
작성일
2007-01-06 14:57ⓒ
2007-01-06 14:58ⓜ
조회수
5,104


select A.id, A.pass, A.pstore_id, A.request, A.src_ip, A.dst_ip, A.src_port, A.dst_port, A.url,

      A.dates, A.user_id, A.board_id, A.subject, A.body, A.exist_file, A.board_alert, A.recovery

from (

    select

          HTTP_LOG.id,

          ((pass)::bit(16) & (검색할 값)::bit(16))::int as pass,

          pstore_id, request, src_ip, dst_ip, src_port, dst_port, url, dates, user_id, board_id,

          subject, body, exist_file, board_alert, recovery

    from

          HTTP_LOG, FILTERING_BOARD

    WHERE

          HTTP_LOG.BOARD_ID = FILTERING_BOARD.ID

) A

WHERE A.pass != 0


   <select id="getLogListByCondition" parameterClass="kr.co.privacycenter.beans.HttpLogCondition" resultMap="abatorgenerated_HttpLogResult">

      select A.id, A.pass, A.pstore_id, A.request, A.src_ip, A.dst_ip, A.src_port, A.dst_port, A.url, A.dates, A.user_id,

       A.board_id, A.subject, A.body, A.exist_file, A.board_alert, A.recovery

     from  

  (select HTTP_LOG.id,

  <isNotNull property="pass">

  <![CDATA[((pass)::bit(16) & (#pass#)::bit(16))::int as ]]>

       </isNotNull>

  pass, pstore_id, request, src_ip, dst_ip, src_port, dst_port, url, dates, user_id,

      board_id, subject, body, exist_file, board_alert, recovery

  from HTTP_LOG, FILTERING_BOARD

  WHERE HTTP_LOG.BOARD_ID = FILTERING_BOARD.ID

       <isNotNull prepend="and" property="adminId">

         FILTERING_BOARD.ADMIN_UID = #adminId#

       </isNotNull>

  ) A

    <dynamic prepend="WHERE">

       <isNotNull prepend="and" property="boardId">

         A.board_id = #boardId#

       </isNotNull>

       <isNotNull prepend="and" property="srcIp">

         A.src_ip = #srcIp#

       </isNotNull>      

       <isNotNull prepend="and" property="userId">

         A.user_id like '%$userId$%'

       </isNotNull>

       <isNotNull prepend="and" property="subject">

         A.subject like '%$subject$%'

       </isNotNull>       

       <isNotNull prepend="and" property="existFile">

         A.exist_file = #existFile#

       </isNotNull>

       <isNotNull prepend="and" property="startDate">

         A.dates > #startDate#

       </isNotNull>

       <isNotNull prepend="and" property="endDate">

         <![CDATA[ A.dates <= #endDate# ]]>

       </isNotNull>

       <isNotNull prepend="and" property="pass">

   A.pass != 0

       </isNotNull>      

      </dynamic>   

  </select>



환경은 java 5.0, linux 2.6 kernel


postresql 8.1 과 ibatis입니다.


본래 abator가 만들어준 쿼리로는, 조인을 어떻게 해야할지 모르겠네요. (abator는 이클립스 플러그인). 그래서 생성해준  ibatis sql맵입니다.


먼저 아래의 ibatis sql맵을 간단히 보면, 기본 sql문에 검색 조건에 따라 조건문이 추가됩니다.


위 sql문은 pass라는 값이 존재할 때의 만들어진 문장입니다.


pass는 int값으로 0~65535 사이의 값이 들어있습니다.

다른 어플리케이션에서 1,2,4,8,... 32768 값들을 선택적으로 더해 DB에 넣어줍니다.


이걸 bit연산으로 추출해야하는데요.


예를 들어 DB에 저장된 pass 값은 258 입니다. (이것은 2와 256의 합이죠.)

이 데이터는 2로 검색해도 선택되어야하고, 256으로 검색해도 선택되어야 합니다. 또한 514 (512 + 2)로 검색되도 선택되어야합니다.


  pass   = 258 (0000000100000010)

&  검색값 =  2 (0000000000000010)

==================================

                  2 (0000000000000010)    : 0 이 아니므로 선택


  pass   = 258 (0000000100000010)

& 검색값= 256 (0000000100000000)

==================================

               256 (0000000100000000)    : 0 이 아니므로 선택


  pass   = 258 (0000000100000010)

& 검색값= 514 (0000001000000010)

==================================

                 2 (0000000000000010)    : 0 이 아니므로 선택


나름대로 열심히 설명했습니다.

java쪽은 수정할 수 있지만, DB 테이블은 변경하지 못합니다.

이 쿼리를 최적화 시킬 수 있을까요? 


[Top]
No.
제목
작성자
작성일
조회
7002PostgreSQL 8.2 윈도우에서 설치시 문제 [2]
이은주
2007-01-12
5622
6999[질문]\d 와 같은 명령어가 있는지요? [1]
가우나라
2007-01-09
4121
6997xlog flush 로그 에러 대처법은? [2]
초보
2007-01-08
4405
6996postgresql bit연산과 ibatis 관련 질문입니다.
zxcasd
2007-01-06
5104
6995pg_xlog 폴더의 물리적 분리는 어떻게 해야하나요 ???? [4]
롱다리
2007-01-06
4041
6993varchar 에 '' 값 안들어가게 하려면 어떻게 해야 되나요? [5]
cooky74
2007-01-05
4373
6992[질문] failed to re-find parent key in "인덱스" 에러 [2]
이현희
2007-01-05
3803
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다