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 4413 게시물 읽기
No. 4413
배열의 요소 전부를 검색하는 방법이 있나요? =_=
작성자
신기배(nonun)
작성일
2002-10-25 19:57
조회수
1,235
첨부파일: arr_join.sql (378bytes)

안녕하세요

 

제가 pgsql을 쓰는 가장 큰 이유중 하나는 배열컬럼의 지원입니다 =_=

그러다 보니 배열컬럼으로 도배가 되어버리긴 했지만요(한테이블에 많게는 4~5개의 배열컬럼이 -_-;)

 

배열의 값에 일정하게 뭔가가 들어가는게 아니라 있으면 들어가고 없으면 안들어가고 하게 되다 보니 배열에 들어있는 데이터중 필요한게 있는 ROW를 알기가 참 힘듭니다 -_-;

배열관련 기본 함수는 array_dims()밖에 몰랐는데 이곳 자료실에서 arr_count()나 arr_update()등을 고쳐서 쓰고는 있는데

검색할때 한방에 처리하게끔 하는건 없는거 같아서요 ㅠ_ㅠ;

arr_update()를 조금 수정해서 arr_join 이라는걸 만들었는데 1, 2, 3, 4 라는 데이터가 들어있는 배열을 text ,1,2,3,4 로 리턴하게 해서

arr_join(배열컬럼) like '%,값%' 이런식으로 검색하고 있습니다..

원시적이고 무대포로 -_-;;

혹시 배열관련 함수가 더 있거나 관련된 문서가 있으면 알려주세요 =_=;

 

아니면 위의 검색을 한방에 할수 있는 방법이라도 ( -_);;

int[] 안에 보통 1~5 정도의 요소가 들어있는데 이를 빨리 검색하는 방법을요 =_=;

부탁드립니다~

이 글에 대한 댓글이 총 9건 있습니다.

postgres소스의

contrib/array를 보세요

황치영님이 2002-10-26 00:50에 작성한 댓글입니다.

다음 글도 참조해 보세요.

 

http://www.powerdb.net/?inc=read&aid=4230&criteria=pgsql&subcrit=devel&record_idx=0&currpg=0

정재익(advance)님이 2002-10-26 07:38에 작성한 댓글입니다.

오.. 됩니다 =_=;

*= 라는 오퍼레이터를 만들수 있네요 =_=;

 

netitup=# SELECT * from tb_column where eid *= 183;

cid | pid | seq | eid | style

-----+-----+-----+-----------+----------------------------------------------------

410 | 48 | 8 | {183,174} | {text-align:left,"border-right:1px solid #E6E6E6"}

380 | 45 | 8 | {183} | {text-align:left,"border-right:1px solid #E6E6E6"}

(2 rows)

 

make 하고 sql입력만 하니까 오오오~~

삽질한 소스를 다 뜯어고쳐야겠네요 ( -_);;;;;;

감사합니다~

신기배(nonun)님이 2002-10-26 09:02에 작성한 댓글입니다.

netitup=# EXPLAIN ANALYZE SELECT p.name from tb_page p right join tb_column c on p.pid=c.pid where c.eid *= 6803;

NOTICE: QUERY PLAN:

 

Merge Join (cost=44.91..106.91 rows=500 width=90) (actual time=31.89..31.92 rows=1 loops=1)

-> Index Scan using tb_page_pkey on tb_page p (cost=0.00..52.00 rows=1000 width=86) (actual time=0.39..12.94 rows=247 loops=1)

-> Sort (cost=44.91..44.91 rows=500 width=4) (actual time=17.97..17.97 rows=1 loops=1)

-> Seq Scan on tb_column c (cost=0.00..22.50 rows=500 width=4) (actual time=17.64..17.71 rows=1 loops=1)

Total runtime: 32.22 msec

 

 

netitup=# EXPLAIN ANALYZE SELECT p.name from tb_page p right join tb_column c on p.pid=c.pid where arr_join(c.eid) like '%,6803%';

NOTICE: QUERY PLAN:

 

Nested Loop (cost=0.00..49.18 rows=5 width=90) (actual time=588.69..592.12 rows=1 loops=1)

-> Seq Scan on tb_column c (cost=0.00..25.00 rows=5 width=4) (actual time=588.03..591.42 rows=1 loops=1)

-> Index Scan using tb_page_pkey on tb_page p (cost=0.00..4.82 rows=1 width=86) (actual time=0.61..0.64 rows=1 loops=1)

Total runtime: 592.36 msec

 

10배 이상의 속도향상이~~~ =_=;;;

신기배(nonun)님이 2002-10-26 09:07에 작성한 댓글입니다.

쿼리문을 보니,

10배 향상 되었다고 좋아할 것이 아닌 것 같은데요. :)

정수형 배열이라면,

정수형 배열에 대한 인덱싱 사용에 관련한 문서가 devel 인가 tutorial에 올라와 있을겝니다.

그문서를 참조하셔서, 쿼리문을 또 한번 바꾸어보세요. :)

단지 배열 요소 검색을 위한 것이라면, 그 문서가 꽤 도움이 될 듯싶습니다. *= 연산자는 아주 비합리적인 연산자입니다. (빨리 없어져야할 연산자인듯. - 아니면, 엔진이 바뀌든지)

ioseph님이 2002-10-26 12:49에 작성한 댓글입니다.

아 감사합니다

그 문서를 저번에 보긴 봤는데 실행에 옮기진 않았었거든요 ^^;

제가 varchar(255)[], int[] 를 주로 쓰고 있는데 varchar(255)[]는 검색이 필요없고 int[]만 검색을 하니까 그 문서를 보고 해봐야겠습니다

 

답변주신분들 감사합니다~

신기배(nonun)님이 2002-10-26 16:49에 작성한 댓글입니다.

intarray 됐습니다~ 이번엔 @@오퍼레이터가 생기네요..

속도는 *=보다 3분의 2정도로 단축이 되네요 ^^;;

감사합니다~ 애로사항이 없어졌습니다~

신기배(nonun)님이 2002-10-26 22:17에 작성한 댓글입니다.

기배님 그 방법론을 Tutorial 에 한번 정리해 주시겠습니까? 앞으로 PostgreSQL 사용자가 늘어 갈수록 이런 문제에 직면하는 사람들이 자꾸 늘어 갈것으로 생각됩니다.

누군가 먼저 애 쓴 사람이 약간의 수고를 더 해 주시는 것이 좋지 않을까 생각되어 말씀 드려 봅니다.

정재익(advance)님이 2002-10-27 09:44에 작성한 댓글입니다.

간단하게 써보려고 했는데 쓰다보니 주저리주저리가 되버렸습니다 -_-;

그나저나 저도 드디어 튜토리얼에 글을~ 움훼훼~ -_-;

신기배(nonun)님이 2002-10-28 00:04에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
4417Inner Join, Outer Join? [1]
김정수
2002-10-29
1184
4416copy로 파일을 읽어 들일때 시퀀스 문제.... [2]
박기원
2002-10-28
992
4415DB 값을 다른 DB에 저장 할 수 있나요? [1]
신성하
2002-10-28
935
4413배열의 요소 전부를 검색하는 방법이 있나요? =_= [9]
신기배
2002-10-25
1235
4411pg_xlog 디렉토리 화일을 삭제했을 때 복구방법이 있는지요.. [1]
김순석
2002-10-25
1539
4410[질문]하나의 조건을 여러필드에 각각주어서 insert하는방법 [3]
주절이
2002-10-24
1012
4412┕>Re: [감사^^]하나의 조건을 여러필드에 각각주어서 insert하는방법
주절이
2002-10-25 10:47:59
890
4409[추카] 드뎌 성공했습니다 [2]
이근호
2002-10-24
977
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다