|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
contrib/intarray int4 ¹è¿ GiST À妽º »ç¿ëÇϱâ
ÀÛ¼ºÀÚ: ½Å±â¹è(¼ÒŸ) nonun@nate.com
1 GiST À妽º
- PostgreSQLÀº ÃÑ 4°¡ÁöÀÇ À妽º¸¦ Áö¿øÇÑ´Ù. btree, hash, rtree, GiST ÀÌ´Ù. (À̰͵éÀÇ Á¶ÇÕ º¯Á¾(?) À妽ºµµ ÀÖ´Ù.)
- GiST´Â ÀϹÝÀûÀÎ ¼Ä¡Æ®¸® ¹æ½ÄÀÇ À妽ºÀÌ´Ù. B+-trees, R-trees µîÀÇ ¸¹Àº À妽º°¡ GiST¿¡ ÀÇÁ¸ÀûÀÌ´Ù.
- PostgreSQLÀÇ contribÁß¿¡´Â GiST¿¡ ÀÇÁ¸ÀûÀÎ ¸ðµâÀÌ ¸î°¡Áö ÀÖ´Ù.
- btree_gist
- cube
- intarray
- ltree
- rtree_gist
- seg
- tsearch
- tsearch2
2 intarray?
- ´Ù¸¥ ¹®¼¿¡¼ ¼³¸íÇßµíÀÌ ¹è¿Å¸ÀÔ¿¡´Â º¸Åë À妽º¸¦ »ç¿ëÇÒ ¼ö ¾ø´Ù. ÇÏÁö¸¸ integer(int4) Çü¿¡ ´ëÇØ¼´Â intarray¶ó´Â ´ëÃ¥ÀÌ ÀÖ´Ù.
- intarray´Â ¾î¶² ±â´ÉµéÀÌ µé¾îÀÖ´ÂÁö »ìÆìº¸ÀÚ.
int icount(int[])
- int[] ÀÇ ¹è¿ÀÇ ¿ä¼Ò °³¼ö¸¦ ¸®ÅÏÇÑ´Ù.
test=# select icount('{1,2,3}'::int[]);
icount
--------
3
(1 row)
int[] sort(int[], 'asc' | 'desc')
test=# select sort('{1,2,3}'::int[],'desc');
sort
---------
{3,2,1}
(1 row)
int[] sort_asc(int[])
int[] sort_desc(int[])
int[] uniq(int[])
- int[]¿¡¼ Áߺ¹µÈ ¿ä¼Ò¸¦ Á¦°ÅÇÏ¿© À¯´ÏÅ©ÇÑ ¿ä¼Ò¸¸ ´ã±ä ¹è¿À» ¸®ÅÏÇÑ´Ù. (´Ü sortµÇ¾î ÀÖ¾î¾ß ÇÑ´Ù)
test=# select uniq(sort('{1,2,3,2,1}'::int[]));
uniq
---------
{1,2,3}
(1 row)
int idx(int[], int item)
- int[]¿¡¼ item°¡ ¾Õ¿¡¼ºÎÅÍ ¸î¹øÂ° À妽º¿¡ À§Ä¡ ÇØ ÀÖ´ÂÁö ¸®ÅÏÇÑ´Ù.
test=# select idx('{1,2,3,2,1}'::int[],2);
idx
-----
2
(1 row)
int[] subarray(int[],int START [, int LEN])
- START¹øÂ° À妽ººÎÅÍ LEN°³ ¸¸ÅÀÇ ºÎºÐÁýÇÕÀ» ¸®ÅÏÇÑ´Ù. (substr, substring µî°ú »ç¿ë¹ýÀÌ À¯»çÇÏ´Ù)
test=# select subarray('{1,2,3,2,1}'::int[],2,3);
subarray
----------
{2,3,2}
(1 row)
2.1.6 intarray_push_elem
int[] intarray_push_elem(int[], int)
2.1.7 intarray_push_array
int[] intarray_push_array(int[], int[])
2.1.8 intarray_del_elem
int[] intarray_del_elem(int[], int)
2.1.9 intset_union_elem
int[] intset_union_elem(int[], int)
2.1.10 intset_subtract
int [] intset_subtract(int[], _int)
2.2 ¿¬»êÀÚ
| int[] && int[] | ÁÂÃø ¹è¿¿¡ ¿ìÃø ¹è¿ ¿ä¼Ò°¡ Çϳª¶óµµ Æ÷ÇԵǸé ÂüÀÌ´Ù |
| int[] @ int[] | ÁÂÃø ¹è¿ÀÌ ¿ìÃø ¹è¿ ¿ä¼Ò¸¦ ¸ðµÎ Æ÷ÇÔÇϸé ÂüÀÌ´Ù. |
| int[] ~ int[] | ¿ìÃø ¹è¿ÀÌ ÁÂÃø ¹è¿ ¿ä¼Ò¸¦ ¸ðµÎ Æ÷ÇÔÇϸé ÂüÀÌ´Ù. |
| # int[] | ¹è¿ÀÇ ¿ä¼Ò °¹¼ö, icount¿Í µ¿ÀÏ |
| int[] + int | ¹è¿µÚ¿¡ Á¤¼ö¸¦ ¹è¿¿ä¼Ò·Î Ãß°¡ÇÑ´Ù. |
| int[] + int[] | ¹è¿ µÎ°³¸¦ º´ÇÕÇÑ´Ù. ÁÂÃø ¹è¿ÀÇ ³¡¿¡ ¿ìÃø ¹è¿ÀÌ ºÙ´Â´Ù. |
| int[] - int | ¹è¿¿¡¼ Á¤¼ö¿Í °°Àº ¹è¿ ¿ä¼Ò¸¦ »«´Ù. |
| int[] - int[] | ÁÂÃø ¹è¿¿¡¼ ¿ìÃø ¹è¿À» »«´Ù. |
| int[] | int | + ¿Í ºñ½ÁÇÏÁö¸¸ ÀÌ¹Ì ¹è¿ÀÌ Æ÷ÇÔÇϰí ÀÖ´Â Á¤¼ö¶ó¸é ¾Æ¹« Àϵµ ÀϾÁö ¾Ê´Â´Ù. |
| int[] | int[] | + ¿Í ºñ½ÁÇÏÁö¸¸ ÀÌ¹Ì ¹è¿ÀÌ Æ÷ÇÔÇϰí ÀÖ´Â ¹è¿ ¿ä¼Ò´Â Ãß°¡µÇÁö ¾Ê´Â´Ù. |
| int[] & int[] | µÎ ¹è¿ÀÇ ±³ÁýÇÕÀ» ¸®ÅÏÇÑ´Ù. |
| int[] @@ query_int | ¹è¿ÀÌ query_int¿Í ¸ÅÄ¡µÇ¸é ÂüÀÌ´Ù. (query_int ¿¹: '1&(2|3)') |
| query_int ~~ int[] | @@ ¿¬»êÀÚ¿Í ¹æÇ⸸ ´Ù¸£´Ù. |
3 intarray ¼³Ä¡
4 GiST À妽º »ç¿ëÇØº¸±â
nonun=# CREATE TABLE test(
nonun(# a int,
nonun(# b int[]
nonun(# );
CREATE TABLE
nonun=# CREATE INDEX index_test_gist ON test using gist (b);
CREATE INDEX
nonun=# COPY test from stdin;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1 {1,2,3}
>> 2 {8,6,3}
>> 3 {5,6,1}
>> 4 {9,11,13}
>> 5 {7,3,4}
>> 6 {1,6,1,7,9}
>> 7 {1,7,8,8,6,1}
>> \.
nonun=# SELECT * from test ;
a | b
---+---------------
1 | {1,2,3}
2 | {8,6,3}
3 | {5,6,1}
4 | {9,11,13}
5 | {7,3,4}
6 | {1,6,1,7,9}
7 | {1,7,8,8,6,1}
(7 rows)
nonun=# SELECT * from test where b @@ '3';
a | b
---+---------
1 | {1,2,3}
2 | {8,6,3}
5 | {7,3,4}
(3 rows)
nonun=# EXPLAIN ANALYZE SELECT * from test where b @@ '3';
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------
Index Scan using index_test_gist on test (cost=0.00..4.82 rows=1 width=36) (actual time=0.074..0.089 rows=3 loops=1)
Index Cond: (b @@ '3'::query_int)
Total runtime: 0.569 ms
(3 rows)
nonun=# SELECT * from test where b @@ '3|2';
a | b
---+---------
1 | {1,2,3}
2 | {8,6,3}
5 | {7,3,4}
(3 rows)
nonun=# EXPLAIN ANALYZE SELECT * from test where b @@ '3|2';
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------
Index Scan using index_test_gist on test (cost=0.00..4.82 rows=1 width=36) (actual time=0.181..0.198 rows=3 loops=1)
Index Cond: (b @@ '3 | 2'::query_int)
Total runtime: 0.675 ms
(3 rows)
nonun=# SELECT * from test where b @@ '3|1';
a | b
---+---------------
1 | {1,2,3}
2 | {8,6,3}
3 | {5,6,1}
5 | {7,3,4}
6 | {1,6,1,7,9}
7 | {1,7,8,8,6,1}
(6 rows)
nonun=# EXPLAIN ANALYZE SELECT * from test where b @@ '3|1';
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------
Index Scan using index_test_gist on test (cost=0.00..4.82 rows=1 width=36) (actual time=0.079..0.102 rows=6 loops=1)
Index Cond: (b @@ '3 | 1'::query_int)
Total runtime: 0.612 ms
(3 rows)
nonun=# SELECT * from test where 3 = any(b);
a | b
---+---------
1 | {1,2,3}
2 | {8,6,3}
5 | {7,3,4}
(3 rows)
nonun=# EXPLAIN ANALYZE SELECT * from test where 3 = any(b);
QUERY PLAN
--------------------------------------------------------------------------------------------------
Seq Scan on test (cost=0.00..45.00 rows=500 width=36) (actual time=0.049..0.068 rows=3 loops=1)
Filter: (3 = ANY (b))
Total runtime: 0.182 ms
(3 rows)
- º¸½Ã¶ó... À妽º ¾ÆÁÖ Àß Å¸°í °è½Ã´Ù! (Áö±Ý ½ÃÄö¼È ½ºÄµÀÌ ½Ã°£ÀÌ ´ú °É¸®´Â ÀÌÀ¯´Â µ¥ÀÌÅͰ¡ Àû±â ¶§¹®ÀÌ´Ù. µ¥ÀÌÅͰ¡ ÀûÀº »óȲ¿¡¼´Â À妽º¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ºñ¿ëÀÌ ´õ µé ¶§µµ ÀÖ´Ù.)
- ´Ù¸¥ ÇÔ¼ö³ª ¿¬»êÀÚ´Â º»ÀÎÀÌ Á÷Á¢ ÇØº¸¼¼¿ä~~
|
|