33.14. À妽º È®Àå ±â´ÉÀÇ ÀÎÅÍÆäÀ̽º

Áö±Ý±îÁö´Â, »õ·Î¿î Çüųª »õ·Î¿î ÇÔ¼ö, ¹× »õ·Î¿î ¿¬»êÀÚ¸¦ ¾î¶»°Ô Á¤ÀÇÇÒÁö¿¡ ´ëÇØ¼­ ¼³¸íÇØ ¿Ô½À´Ï´Ù. ±×·¸Áö¸¸, »õ·Î¿î ÇüÅÂÀÇ ¿­¿¡ ´ëÇÑ À妽º¸¦ ¾ÆÁ÷ ÀÛ¼ºÇÒ ¼ö°¡ ¾ø½À´Ï´Ù. ÀÌ ¶§¹®¿¡´Â, »õ·Î¿î µ¥ÀÌÅÍÇü¿¡ ´ëÇÑ ¿¬»êÀÚ Å¬·¡½º¸¦ Á¤ÀÇÇØ¾ßÇÕ´Ï´Ù. º»Àý¿¡¼­´Â, º¹¼Ò¼ö¸¦ °ªÀÇ Àý´ë°ªÀÇ ¿À¸§Â÷¼ø Á¤·ÄÇØ ÀúÀåÇÏ´Â B-tree À妽º ¹æ¹ýÀ» »ç¿ëÇÑ »õ·Î¿î ¿¬»êÀÚ Å¬·¡½º¿¡ ´ëÇÑ ½ÇÇà ¿¹¸¦ ÀÌ¿ëÇØ, ¿¬»êÀÚ Å¬·¡½ºÀÇ °³³äÀ» ¼³¸íÇÕ´Ï´Ù.

Note: PostgreSQL 7.3 ¸±¸®½º ÀÌÀü±îÁö´Â, »ç¿ëÀÚ Á¤ÀÇµÈ ¿¬»ê Ŭ·¡½º¸¦ »ý¼ºÇϱâ À§ÇØ ½Ã½ºÅÛ ¸ñ·Ïpg_amop, pg_amproc, pg_opclass¸¦ ¸Þ´º¾ó¿¡ Ãß°¡ÇØ¾ß Çß½À´Ï´Ù. ÀÌ·± Á¢±Ù¹æ½ÄÀº »ç¿ëÀÌ ÁßÁöµÇ¾ú½À´Ï´Ù. CREATE OPERATOR CLASS °¡ ÈξÀ °£´ÜÇÏ°í ¿¡·¯°¡ ÀûÀº ÇÊ¿ä ¸ñ·Ï ¿£Æ®¸®ÀÇ »ý¼º ¹æ¹ýÀ̱⠶§¹®ÀÔ´Ï´Ù.

33.14.1. À妽º ¹æ¹ý¿Í ¿¬»êÀÚ Å¬·¡½º

pg_amÅ×ÀÌºí¿¡´Â °¢ À妽º ¹æ¹ý(³»ºÎ¿¡¼­´Â Á¢¼Ó ¹æ¹ýÀ¸·Î¼­ ¾Ë·ÁÁ® ÀÖ½À´Ï´Ù)¿¡ ´ëÇØ¼­ 1°³ÀÇ ÇàÀÌ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. Å×ÀÌºí¿¡ÀÇ º¸ÅëÀÇ Á¢¼Ó Áö¿øÀº PostgreSQL¿¡ ³»ÀåµÅÀÖ½À´Ï´Ù¸¸, ¸ðµç À妽º ¹æ¹ýÀº, pg_am·Î ±â¼úµÇ°í ÀÖ½À´Ï´Ù. ÇÊ¿äÇÏ°Ô µÇ´Â ÀÎÅÍÆäÀ̽º ·çƾÀ» Á¤ÀÇÇÑ ÈÄ, pg_am¿¡ ÇàÀ» ÀÛ¼ºÇÏ´Â °Í¿¡ ÀÇÇØ, »õ·Î¿î À妽º ¹æ¹ýÀ» Ãß°¡ÇÏ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù. ±×·¯³ª, ÀÌ ¹æ¹ý¿¡ ´ëÇÑ ¼³¸íÀº º»Àå¿¡¼­ÀÇ ¹üÀ§¸¦ ³Ñ°í ÀÖ½À´Ï´Ù(Chapter 49¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä).

À妽º ¹æ¹ýÀÇ ·çƾ¿¡´Â, Á÷Á¢ÀûÀ¸·Î À妽º ¹æ¹ýÀÌ ¿¬»êÇÏ´Â µ¥ÀÌÅÍÇüÀÇ Á¤º¸´Â ¾Æ¹«°Íµµ ÁÖ¾îÁö°í ÀÖÁö ¾Ê½À´Ï´Ù. ´ë½Å¿¡, ¿¬»êÀÚ Å¬·¡½º°¡, ƯÁ¤ÀÇ µ¥ÀÌÅÍÇüÀÇ Á¶ÀÛ¿¡ ´ëÇØ À妽º ¹æ¹ýÀ» »ç¿ëÇÒ Çʿ䰡 ÀÖ´Â ¿¬»êÀÇ ÁýÇÕÀ» ½Äº°ÇÕ´Ï´Ù. ¿¬»êÀÚ Å¬·¡½º¶ó´Â À̸§ÀÇ À¯·¡´Â, ±×°ÍµéÀÌ ÁöÁ¤ÇÏ´Â °ÍÀÇ 1°³¿¡ À妽º·Î »ç¿ëÇÒ ¼ö ÀÖ´Â (Áï, À妽º °Ë»ö Á¶°ÇÀ¸·Î º¯È¯ÇÒ ¼ö ÀÖ´Ù) WHERE±¸ ¿¬»êÀÚÀÇ ÁýÇÕÀÌ Àֱ⠶§¹®ÀÔ´Ï´Ù. ¶Ç, ¿¬»êÀÚ Å¬·¡½º´Â, À妽º ¹æ¹ýÀÇ ³»ºÎ ¿¬»êÀ¸·Î ÇÊ¿äÇÑ, ±×·¯³ª À妽º·Î »ç¿ëÇÒ ¼ö ÀÖ´Â WHERE±¸ ¿¬»êÀÚ¿¡´Â Á÷Á¢ÀûÀ¸·Î´Â ´ëÀÀÇÏÁö ¾Ê´Â, Áö¿ø ÇÁ·Î½ÃÀú¸¦ ¸î°³ ÁöÁ¤ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.

°°Àº ÀÔ·Â µ¥ÀÌÅÍÇü ¹× À妽º ¹æ¹ý¿¡ ´ëÇØ¼­ º¹¼öÀÇ ¿¬»êÀÚ Å¬·¡½º¸¦ Á¤ÀÇÇÏ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ, 1°³ÀÇ µ¥ÀÌÅÍÇü¿¡ ´ëÇØ¼­, À妽ººÎ Àǹ̷ÐÀÇ ´Ù¼öÀÇ ÁýÇÕÀ» Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é, B-tree À妽º¿¡¼­´Â, ó¸®ÇÏ´Â µ¥ÀÌÅÍÇü ¸¶´Ù Á¤·Ä¼ø¼­¸¦ Á¤ÀÇÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. º¹¼Ò¼ö µ¥ÀÌÅÍÇü¿¡¼­´Â, º¹¼Ò¼öÀÇ Àý´ë°ª¿¡ ÀÇÇØ µ¥ÀÌÅ͸¦ Á¤·ÄÇÏ´Â B-tree ¿¬»êÀÚ Å¬·¡½º¿Í ½ÇºÎÀÇ ¼öÄ¡¿¡ ÀÇÇØ Á¤·ÄÇÏ´Â B-tree ¿¬»êÀÚ Å¬·¡½º¸¦ °®´Â ¹æ¹ýÀº, À¯¿ëÇÒ°ÍÀÔ´Ï´Ù. Åë»óÀº ¿¬»êÀÚ Å¬·¡½ºÀÇ Çϳª°¡ ÀϹÝÀûÀ¸·Î °¡Àå À¯¿ëÇÏ´Ù°í ÆÇ´ÜµÇ¾î ±× µ¥ÀÌÅÍÇü ¹× À妽º¹æ¹ý¿¡ ´ëÇÑ ±âº»°ªÀÇ ¿¬»êÀÚ Å¬·¡½º·Î¼­ ¼³Á¤µË´Ï´Ù.

¸î¸îÀÇ ´Ù¸¥ À妽º ¹æ¹ý¿¡, µ¿ÀÏÇÑ ¿¬»êÀÚ Å¬·¡½º¸íÀ» »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù (¿¹¸¦ µé¸é, B-tree¿Í ÇØ½Ã À妽º ¹æ¹ýÀº, µÑ ´Ù int4_ops¶ó´Â À̸§ÀÇ ¿¬»êÀÚ Å¬·¡½º¸¦ °¡Áú ¼ö°¡ ÀÖ½À´Ï´Ù). ´Ù¸¸, ±×·¯ÇÑ °¢ Ŭ·¡½º´Â µ¶¸³µÈ ½ÇüÀ̸ç, µû·Î µû·Î Á¤ÀÇµÉ Çʿ䰡 ÀÖ½À´Ï´Ù.

33.14.2. À妽º ¹æ¹ýÀÇ Àü·«

¿¬»êÀÚ Å¬·¡½º¿¡ °ü·ÃÁöÀ» ¼ö ÀÖ´Â ¿¬»êÀÚ´Â, "Àü·« ¹øÈ£"¿¡ ÀÇÇØ ½Äº°µË´Ï´Ù. "Àü·« ¹øÈ£"´Â, ¿¬»êÀÚ Å¬·¡½ºÀÇ ¹®¸Æ ³»ÀÇ °¢ ¿¬»êÀÚÀÇ Àǹ̷ÐÀ» ½Äº°Çϱâ À§ÇÑ °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¸é, B-treeÀÇ °æ¿ì, ۰¡ ÀÛÀº ÂÊ¿¡¼­ Å« ÂÊÀ¸·Î ¾ö°ÝÇÏ°Ô ÁÙÁö¾î ÀÖ¾î¾ßÇÕ´Ï´Ù. µû¶ó¼­, B-tree¿¡ °üÇØ¼­, "º¸´Ù ÀÛ°í" "´õ Å©°Å³ª" µ¿ÀÏÇÑ ¿¬»êÀÚ´Â Èï¹Ì·Ó½À´Ï´Ù. PostgreSQL¿¡¼­´Â »ç¿ëÀÚ°¡ ¿¬»êÀÚ¸¦ Á¤ÀÇÇÒ ¼ö Àֱ⠶§¹®¿¡, PostgreSQL´Â ¿¬»êÀÚÀÇ À̸§(¿¹¸¦ µé¸é <³ª >=)À» ã¾Æ³»µµ, ±× ¿¬»êÀÚ°¡ ¾î¶°ÇÑ ºñ±³¸¦ ½Ç½ÃÇÒÁö ÆÇ´ÜÇÒ ¼ö ¾ø½À´Ï´Ù. ±× ´ë½ÅÇØ, À妽º ¹æ¹ýÀº "Àü·«"ÀÇ ÁýÇÕÀ» Á¤ÀÇÇÕ´Ï´Ù. "Àü·«"´Â, ¹ü¿ë ¿¬»êÀÚ¶ó°í »ý°¢ÇÒ ¼ö ÀÖ½À´Ï´Ù. °¢ ¿¬»êÀÚ Å¬·¡½º´Â, ƯÁ¤ÀÇ µ¥ÀÌÅÍÇü ¹× À妽º Àǹ̷ÐÀÇ ÇØ¼®¿¡ ÀÖ¾î, ½ÇÁ¦ÀÇ ¾î´À ¿¬»êÀÚ°¡ °¢ Àü·«¿¡ ´ëÀÀÇÏ´ÂÁö¸¦ ÁöÁ¤ÇÕ´Ï´Ù.

Table 33-2¿¡ ³ªÅ¸³ªµíÀÌ, B-tree À妽º ¹æ¹ý¿¡¼­´Â Àü·«À» 5°³ Á¤ÀÇÇÕ´Ï´Ù.

Table 33-2. B-tree Àü·«

¿¬»ê Àü·« ¹øÈ£
º¸´Ù ´õ ÀÛÀº 1
ÀÌÇÏ 2
µ¿ÀÏÇÏ´Ù 3
ÀÌ»ó 4
º¸´Ù ´õ Å« 5

ÇØ½Ã À妽º´Â, ºñÆ®¸¶´ÙÀÇ µî°¡¼º¸¸À» Áö¿øÇÕ´Ï´Ù. µû¶ó¼­, Table 33-3¿¡ ³ªÅ¸³ªµíÀÌ, Àü·«À» 1°³¸¸ Á¤ÀÇÇÕ´Ï´Ù.

Table 33-3. ÇØ½Ã Àü·«

¿¬»ê Àü·« ¹øÈ£
µ¿ÀÏÇÏ´Ù 1

GiST À妽º´Â ´õ¿í À¯¿¬ÇÕ´Ï´Ù. °íÁ¤µÈ Àü·«ÀÇ ÁýÇÕÀ» ÀüÇô °¡ÁöÁö ¾Ê½À´Ï´Ù. ´ë½Å, ƯÁ¤ÀÇ GiST ¿¬»êÀÚ Å¬·¡½ºÀÇ "consistent"Áö¿ø ·çƾÀÌ, Àü·« ¹øÈ£°¡ ¹«¾ùÀ» ÀǹÌÇÏ´ÂÁö¸¦ ÇØ¼®ÇÕ´Ï´Ù. ¿¹¸¦ µé¾î, ¸î¸îÀÇ ³»ÀåµÈ GiST À妽º ¿¬»êÀÚ Å¬·¡½º´Â, 2 Â÷¿ø ±âÇÏ °´Ã¼¸¦ À妽º ºÙ¿©, Table 33-4 ¿¡ º¸¿©Áö´Â "R-tree"Àü·«À» Á¦°øÇÕ´Ï´Ù. ÀÌ Áß 4°³´Â 2 Â÷¿ø(Áߺ¹, ÇÕµ¿, ÇÔÀ¯, ÇÇÇÔÀ¯) Å×½ºÆ®ÀÔ´Ï´Ù. ³ª¸ÓÁö 8°³ Áß 4°³´Â X¹æÇâ¿¡ ´ëÇÑ, ³ª¸ÓÁö 4°³´Â Y¹æÇâ¿¡ ´ëÇÑ µ¿ÀÏÇÑ Å×½ºÆ®¸¦ Á¦°øÇÕ´Ï´Ù.

Table 33-4. GiST 2 Â÷¿ø "R-tree"Àü·«

¿¬»ê Àü·« ¹øÈ£
¿ÏÀüÇÏ°Ô ÁÂÃø 1
¿ìÃø¿¡´Â È®ÀåÇÏÁö ¾Ê´Â´Ù 2
°ãÄ£´Ù 3
ÁÂÃø¿¡´Â È®ÀåÇÏÁö ¾Ê´Â´Ù 4
¿ÏÀüÇÏ°Ô ¿ìÃø 5
°°´Ù 6
Æ÷ÇÔÇÑ´Ù 7
Æ÷ÇԵȴ٠8
À§ÂÊ¿¡´Â È®ÀåÇÏÁö ¾Ê´Â´Ù 9
¿ÏÀüÇÏ°Ô ¾Æ·¡ ÂÊ 10
¿ÏÀüÇÏ°Ô À§ÂÊ 11
¾Æ·¡ ÂÊ¿¡´Â È®ÀåÇÏÁö ¾Ê´Â´Ù 12

GIN À妽º´Â À¯¿¬¼ºÀ̶ó´Â Á¡À¸·Î½á GiST¿Í ´à¾Æ ÀÖ½À´Ï´Ù. ±×·¯³ª, °íÁ¤µÈ Àü·«±ºÀ» °¡ÁöÁö ¾Ê½À´Ï´Ù. ±× ´ë½Å¿¡, °¢ ¿¬»êÀÚ Å¬·¡½ºÀÇ Áö¿ø ·çƾÀÌ ¿¬»êÀÚ Å¬·¡½ºÀÇ Á¤ÀÇ¿¡ µû¶ó Àü·«¼ö¸¦ ÇØ¼®ÇÕ´Ï´Ù. ¿¹¸¦ µé¸é, ÆíÀÔÀÇ ¹è¿­¿¡ ´ëÇÑ ¿¬»êÀÚ Å¬·¡½ºÀÇ Àü·«À» Table 33-5¿¡ ³ªÅ¸³À´Ï´Ù.

Table 33-5. GIN ¹è¿­ÀÇ Àü·«

Á¶ÀÛ Àü·«¼ö
Áߺ¹ 1
Æ÷ÇÔ 2
ÇÔÀ¯ µÈ´Ù 3
µ¿ÀÏÇÏ´Ù 4

¸ðµç Àü·« ¿¬»êÀÚ´Â ³í¸®°ªÀ» ¹ÝȯÇÏ´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä. ½ÇÁ¦, À妽º·Î »ç¿ëµÇ±â À§Çؼ­ WHEREÀÇ ÃÖ»óÁ¤µµ ·¹º§·Î ³ªÅ¸³ª¾ß Çϱ⠶§¹®¿¡, À妽º ¹æ¹ý Àü·«À¸·Î¼­ Á¤ÀÇµÈ ¸ðµç ¿¬»êÀÚÀÇ ¹Ýȯ°ªÀÇ ÇüÅ´ boolean°¡ ¾Æ´Ï¸é ¾ÈµË´Ï´Ù.

33.14.3. À妽º ¹æ¹ýÀÇ Áö¿ø ·çƾ

Àü·«Àº Åë»ó, ½Ã½ºÅÛÀÌ À妽º¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ÆÇ´ÜÇϱâ À§Çؼ­(¶§¹®¿¡) ÃæºÐÇÑ Á¤º¸°¡ ¾Æ´Õ´Ï´Ù. ½ÇÁ¦·Î´Â, À妽º ¹æ¹ýÀº, ÀÛ¾÷À» À§Çؼ­(¶§¹®¿¡) Ãß°¡ÀÇ Áö¿ø ·çƾÀ» ÇÊ¿ä·Î ÇÕ´Ï´Ù. ¿¹¸¦ µé¸é B-tree À妽º ¹æ¹ýÀº, 2°³ÀÇ Å°¸¦ ºñ±³ÇØ, º¸´Ù Å« °ÍÀÎÁö, µ¿ÀÏÇÑ °ÍÀÎÁö, º¸´Ù ÀÛÀº °ÍÀÎÁö¸¦ °áÁ¤ÇÒ ¼ö ¾øÀ¸¸é ¾ÈµË´Ï´Ù. °°ÀÌ ÇØ½Ã À妽º´Â, ŰġÀÇ ÇØ½Ã Äڵ带 °è»êÇÒ ¼ö ¾øÀ¸¸é ¾ÈµË´Ï´Ù. ÀÌ·¯ÇÑ Á¶ÀÛÀº SQL ¸í·ÉÀÇ Á¶°Ç³»¿¡¼­ »ç¿ëµÇ´Â ¿¬»êÀÚ¿Í´Â ´ëÀÀÇÏÁö ¾Ê½À´Ï´Ù. À̰͵éÀº À妽º ¹æ¹ýÀ¸·Î ³»ºÎÀûÀ¸·Î »ç¿ëµÇ´Â °ü¸®¿ë ·çƾÀÔ´Ï´Ù.

Àü·«Ã³·³, ¿¬»êÀÚ Å¬·¡½º¿¡ ÀÇÇØ ÁÖ¾îÁø µ¥ÀÌÅÍÇü ¹× ÀÇ¹Ì·Ð ÇØ¼®¿¡ ´ëÇØ¼­, ¾î´À ƯÁ¤ÀÇ ÇÔ¼ö°¡ ÀÌ·¯ÇÑ °¢ ¿ªÇÒÀ» ¿Ï¼öÇØ¾ß ÇÏ´Â °ÍÀÎÁö°¡ ½Äº°µË´Ï´Ù. À妽º ¹æ¹ýÀº ÇÊ¿äÇÑ ÇÔ¼öÀÇ ÁýÇÕÀ» Á¤ÀÇÇϰí, ¿¬»êÀÚ Å¬·¡½º´Â, À妽º ¹æ¹ýÀ¸·Î ÁöÁ¤µÈ "Áö¿ø ÇÔ¼ö ¹øÈ£"¿¡ ´ëÀÔÇÏ´Â °Í¿¡ ÀÇÇØ, »ç¿ëÇØ¾ß ÇÒ ¿Ã¹Ù¸¥ ÇÔ¼ö¸¦ ½Äº°ÇÕ´Ï´Ù.

Table 33-6¿¡ ³ªÅ¸³ªµíÀÌ, B-tree¿¡´Â ´ÜÀÏÀÇ Áö¿ø ÇÔ¼ö°¡ ÇÊ¿äÇÕ´Ï´Ù.

Table 33-6. B-tree Áö¿ø ÇÔ¼ö

ÇÔ¼ö Áö¿ø ¹øÈ£
2°³ÀÇ Å°¸¦ ºñ±³ÇØ, ù¹øÂ° ۰¡ 2¹øÂ°ÀÇ Å°º¸´Ù ÀÛÀºÁö, µ¿ÀÏÇÑÁö, Å«Áö ³ªÅ¸³»´Â, 0 ¹Ì¸¸, 0, ȤÀº 0º¸´Ù Å« Á¤¼ö¸¦ µ¹·ÁÁÝ´Ï´Ù. 1

Table 33-7¿¡ ³ªÅ¸³ªµíÀÌ, ÇØ½Ã À妽ºµµ ÀÌ¿Í °°ÀÌ ´ÜÀÏÀÇ Áö¿ø ÇÔ¼ö°¡ ÇÊ¿äÇÕ´Ï´Ù.

Table 33-7. ÇØ½Ã Áö¿ø ÇÔ¼ö

ÇÔ¼ö Áö¿ø ¹øÈ£
ŰÀÇ ÇØ½Ã°ªÀ» °è»ê 1

Table 33-8¿¡ ³ªÅ¸³ªµíÀÌ, GiST À妽º¿¡´Â 7°³ÀÇ Áö¿ø ÇÔ¼ö°¡ ÇÊ¿äÇÕ´Ï´Ù.

Table 33-8. GiST Áö¿ø ÇÔ¼ö

ÇÔ¼ö Áö¿ø ¹øÈ£
consistent - ۰¡ Äõ¸® Á¶°ÇÀ» ä¿ïÁö ¾î¶³Áö¸¦ °áÁ¤ÇÕ´Ï´Ù. 1
union - ŰÀÇ ÁýÇÕÀÇ È­ÁýÇÕÀ» °è»êÇÕ´Ï´Ù. 2
compress - Ű ¶Ç´Â À妽º ºÙÀÌ°í µÇ´Â °ªÀÇ ¾ÐÃà Ç¥ÇöÀ» °è»êÇÕ´Ï´Ù. 3
decompress - ¾ÐÃàµÈ ŰÀÇ ¾ÐÃàÀÌ Ç®¸° Ç¥ÇöÀ» °è»êÇÕ´Ï´Ù. 4
penalty - ÁöÁ¤µÈ ¼­ºêÆ®¸® ۸¦ °¡Áö´Â ¼­ºêÆ®¸®¿¡ »õ·Î¿î ۸¦ »ðÀÔÇÒ ¶§ÀÇ ÆÐ³ÎƼ¸¦ °è»êÇÕ´Ï´Ù. 5
picksplit - ÆäÀÌÁöÀÇ ¾î´À ¿£Æ®¸®¸¦ »õ·Î¿î ÆäÀÌÁö¿¡ À̵¿½ÃųÁö¸¦ °áÁ¤ÇØ, °á°ú ÆäÀÌÁö¿ëÀÇ ÅëÇÕ Å°¸¦ °è»êÇÕ´Ï´Ù. 6
equal -2°³ÀÇ Å°¸¦ ºñ±³ÇØ, µ¿ÀÏÇϸé ÂüÀ» µ¹·ÁÁÝ´Ï´Ù. 7

GIN À妽º´Â, Table 33-9¿¡ ³ªÅ¸³ª´Â 4°³ÀÇ Áö¿ø ÇÔ¼ö¸¦ ÇÊ¿ä·Î ÇÕ´Ï´Ù.

Table 33-9. GIN Áö¿ø ÇÔ¼ö

ÇÔ¼ö Áö¿ø ¼ö
ºñ±³. 2°³ÀÇ Å°¸¦ ºñ±³ÇØ, 0 ¹Ì¸¸, 0, 0º¸´Ù Å« Á¤¼ö¸¦ µ¹·ÁÁÝ´Ï´Ù. °¢°¢ ù ¹øÂ° ۰¡ Å«Áö, µ¿ÀÏÇÑÁö, ÀÛÀºÁö¸¦ ³ªÅ¸³À´Ï´Ù. 1
°ªÃßÃâ. À妽º ºÙÀÎ °ªÀ¸·ÎºÎÅÍ Å°¸¦ ÃßÃâÇÕ´Ï´Ù. 2
Äõ¸® ÃßÃâ. Äõ¸® Á¶°ÇÀ¸·ÎºÎÅÍ Å°¸¦ ÃßÃâÇÕ´Ï´Ù. 3
Àϰü¼º. ¹¹¸® Á¶°Ç¿¡ ÀÏÄ¡ÇÏ´Â °ªÀÎÁö ¾Æ´ÑÁö¸¦ °áÁ¤ÇÕ´Ï´Ù. 4

Àü·« ¿¬»ê°ú ´Þ¸®, Áö¿ø ÇÔ¼ö´Â ƯÁ¤ÀÇ À妽º ¹æ¹ýÀÌ »óÁ¤ÇÏ´Â µ¥ÀÌÅÍÇü, ¿¹¸¦ µé¸é B-tree¿ëÀÇ ºñ±³ ÇÔ¼öÀÇ °æ¿ì, ºÎÈ£ ÷ºÎ Á¤¼ö¸¦ µ¹·ÁÁÝ´Ï´Ù.

33.14.4. ¿¹

¿©±â±îÁö·Î °³³ä¿¡ ´ëÇØ ¼³¸íÇØ ¿Ô½À´Ï´Ù. ¿©±â¼­, »õ·Î¿î ¿¬»êÀÚ Å¬·¡½º¸¦ ÀÛ¼ºÇÏ´Â À¯¿ëÇÑ ¿¹¸¦ ¼Ò°³ÇÕ´Ï´Ù (ÀÌ ¿¹¸¦ ÀÛ¾÷ÇÒ ¼ö ÀÖµµ·Ï, ¹èÆ÷µÈ ¼Ò½º³»¿¡ src/tutorial/complex.c¿Í src/tutorial/complex.sql¿¡ º¹»ç°¡ ÀÖ½À´Ï´Ù). ÀÌ ¿¬»êÀÚ Å¬·¡½º´Â, º¹¼Ò¼ö¸¦ ±× Àý´ëÄ¡¿¡ ÀÇÇÑ Â÷·Ê·Î ¼ÒÆ® ÇÏ´Â ¿¬»êÀÚ¸¦ ĸ½¶È­ÇÕ´Ï´Ù. ±×·¯¹Ç·Î, ±× À̸§¿¡ complex_abs_ops¸¦ ¼±ÅÃÇß½À´Ï´Ù. ù ¹øÂ°·Î, ¿¬»êÀÚÀÇ ÁýÇÕÀÌ ÇÊ¿äÇÏ°Ô µË´Ï´Ù. ¿¬»êÀÚ¸¦ Á¤ÀÇÇϴ ó¸®´Â Section 33.12À¸·Î ¼³¸íÇß½À´Ï´Ù. B-tree»óÀÇ ¿¬»êÀÚ Å¬·¡½º¿¡¼­´Â, ÀÌÇÏÀÇ ¿¬»êÀÚ°¡ ÇÊ¿äÇÕ´Ï´Ù.

ºñ±³ ¿¬»êÀÚÀÇ °ü·ÃÇÏ´Â ÁýÇÕÀ» Á¤ÀÇÇÒ ¶§¿¡ ¿¡·¯ÀÇ ¹ß»ýÀ» ÃÖ¼Ò·Î ÇÏ´Â ¹æ¹ýÀº, ¿ì¼±, B-tree ºñ±³ Áö¿ø ÇÔ¼ö¸¦ ÀÛ¼ºÇØ, ±× ÈÄ¿¡, ´Ù¸¥ ÇÔ¼ö¸¦ Áö¿ø ÇÔ¼ö¿¡ ´ëÇÑ ÇϳªÀÇ ÇàÀÇ µ¤°³·Î¼­ ÀÛ¼ºÇÏ´Â °ÍÀÔ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ, ÂùÇÕÀÇ ±¸¼®¿¡¼­ Àϰü¼ºÀÌ ¾ø´Â °á°ú¸¦ ¾ò´Â È®·üÀÌ °¨¼ÒÇÕ´Ï´Ù. ÀÌ Á¢±Ù¹ý¿¡ µû¶ó, ¿ì¼± ÀÌÇϸ¦ ÀÛ¼ºÇÕ´Ï´Ù.

#define Mag(c)  ((c)->x*(c)->x + (c)->y*(c)->y)

static int
complex_abs_cmp_internal(Complex *a, Complex *b)
{
    double      amag = Mag(a),
                bmag = Mag(b);

    if (amag < bmag)
        return -1;
    if (amag > bmag)
        return 1;
    return 0;
}

À̰ÍÀ¸·Î, ´õ ÀÛÀº ÇÔ¼ö´Â ÀÌÇÏ¿Í °°ÀÌ µË´Ï´Ù.

PG_FUNCTION_INFO_V1(complex_abs_lt);

Datum
complex_abs_lt(PG_FUNCTION_ARGS)
{
    Complex    *a = (Complex *) PG_GETARG_POINTER(0);
    Complex    *b = (Complex *) PG_GETARG_POINTER(1);

    PG_RETURN_BOOL(complex_abs_cmp_internal(a, b) < 0);
}

´Ù¸¥ ³× °³ÀÇ ÇÔ¼ö¿¡¼­ÀÇ Â÷ÀÌ´Â, ³»ºÎ ÇÔ¼öÀÇ °á°ú¿Í 0À» ¾î¶»°Ô ºñ±³Çϴ°¡ ÀÔ´Ï´Ù.

´ÙÀ½¿¡, ÇÔ¼ö¿Í ÀÌ ÇÔ¼ö¿¡ ±Ù°ÅÇÏ´Â ¿¬»êÀÚ¸¦ SQL·Î ¼±¾ðÇÕ´Ï´Ù.

CREATE FUNCTION complex_abs_lt(complex, complex) RETURNS bool
    AS '
filename
', 'complex_abs_lt'
    LANGUAGE C IMMUTABLE STRICT;

CREATE OPERATOR < (
   leftarg = complex, rightarg = complex, procedure = complex_abs_lt,
   commutator = > , negator = >= ,
   restrict = scalarltsel, join = scalarltjoinsel
);

¿Ã¹Ù¸£°Ô ±³È¯ ¿¬»êÀÚ¿Í ºÎÁ¤ÀÚ ¿¬»êÀÚ¸¦ ÁöÁ¤ÇÏ´Â °Í ¿Ü¿¡µµ, ÀûÀýÇÑ Á¦ÇÑ ¼±Åüº ÇÔ¼ö¿Í °áÇÕ ÇÔ¼ö¸¦ ÁöÁ¤ÇÏ´Â °ÍÀÌ Áß¿äÇÕ´Ï´Ù. ±×·¸Áö ¾ÊÀ¸¸é, ÃÖÀûÈ­´Â À妽º¸¦ È¿À²ÀûÀ¸·Î »ç¿ëÇÒ ¼ö°¡ ¾ø½À´Ï´Ù. ´õ À۰ųª, µ¿ÀÏÇϰųª, ´õ Å« °æ¿ì¿¡ ´Ù¸¥ ¼±Åüº ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÏ´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä.

±× ¹Û¿¡µµ, °ªÀÌ ¾ø´Â °ÍÀÌ ¿©±â¼­ ¹ß»ýÇÕ´Ï´Ù.

´ÙÀ½ÀÇ ½ºÅÜÀº, B-tree¿¡ ÇÊ¿äÇÑ Áö¿ø ·çƾÀÇ µî·ÏÀÔ´Ï´Ù. À̰ÍÀ» ±¸ÇöÇÏ´Â CÄÚµå´Â, ¿¬»êÀÚ ÇÔ¼ö¿Í °°Àº ÆÄÀÏ¿¡ µé¾îÀÖ½À´Ï´Ù. ÀÌÇÏ´Â, ÇÔ¼ö¸¦ ¾î¶»°Ô ¼±¾ðÇÏ´ÂÁö¸¦ ³ªÅ¸³À´Ï´Ù.

CREATE FUNCTION complex_abs_cmp(complex, complex)
    RETURNS integer
    AS '
filename
'
    LANGUAGE C IMMUTABLE STRICT;

Áö±Ý±îÁö·Î, ÇÊ¿äÇÑ ¿¬»êÀÚ ¹× Áö¿ø ·çƾÀ» °¡Áö°Ô µÇ¾ú½À´Ï´Ù. ¸¶Áö¸·¿¡ ¿¬»êÀÚ Å¬·¡½º¸¦ ÀÛ¼ºÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.

CREATE OPERATOR CLASS complex_abs_ops
    DEFAULT FOR TYPE complex USING btree AS
        OPERATOR        1       < ,
        OPERATOR        2       <= ,
        OPERATOR        3       = ,
        OPERATOR        4       >= ,
        OPERATOR        5       > ,
        FUNCTION        1       complex_abs_cmp(complex, complex);

À̰ÍÀ¸·Î ¸¶Áö¸·ÀÔ´Ï´Ù! À̰ÍÀ¸·Î complex¿­¿¡ B-tree À妽º¸¦ ¸¸µé¾î »ç¿ëÇÏ´Â °ÍÀÌ °¡´ÉÇÏ°Ô µÇ¾úÀ» °ÍÀÔ´Ï´Ù.

ÀÌÇÏ¿Í °°ÀÌ, ¿¬»êÀÚ ¿£Æ®¸®¸¦ º¸´Ù ÀåȲÇÏ°Ô ±â¼úÇÒ ¼ö ÀÖ½À´Ï´Ù.

        OPERATOR        1       < (complex, complex) ,

±×·¯³ª, ¿¬»êÀÚ°¡, ¿¬»êÀÚ Å¬·¡½ºÀÇ Á¤ÀÇ¿Í µ¿ÀÏÇÑ µ¥ÀÌÅÍÇüÀÎ °æ¿ì, ÀÌ·¯ÇÑ ±â¼úÀ» ÇÒ ÇÊ¿ä´Â ¾ø½À´Ï´Ù.

»ó±âÀÇ ¿¹´Â, »ç¿ëÀÚ°¡ ÀÌ »õ·Î¿î ¿¬»êÀÚ Å¬·¡½º¸¦ complexµ¥ÀÌÅÍÇüÀÇ ±âº»°ªÀÇ B-tree ¿¬»êÀÚ Å¬·¡½º·Î ÇÏ·Á´Â °ÍÀ» °¡Á¤Çϰí ÀÖ½À´Ï´Ù. ÀÌ¿Í °°ÀÌ ÇÏÁö ¾Ê´Â °æ¿ì, DEFAULT¶ó°í ÇÏ´Â ´Ü¾î¸¦ ¾ø¾Ö ÁÖ¼¼¿ä.

33.14.5. ±³Â÷ µ¥ÀÌÅÍÇü ¿¬»êÀÚ Å¬·¡½º

Áö±Ý±îÁö´Â ¾Ï¹¬ÀûÀ¸·Î, ¿¬»êÀÚ Å¬·¡½º´Â 1°³ÀÇ µ¥ÀÌÅÍÇü¸¸À» Ãë±ÞÇÏ´Â °ÍÀ» °¡Á¤ÇØ ¿Ô½À´Ï´Ù. È®½ÇÇÏ°Ô Æ¯Á¤ÀÇ À妽º¿­¿¡ ´Ü 1°³ÀÇ µ¥ÀÌÅÍÇü¸¸ ÀÖÁö¸¸, ´Ù¸¥ µ¥ÀÌÅÍÇüÀÇ °ª°ú À妽º¿­ÀÇ ºñ±³¸¦ ½Ç½ÃÇÏ´Â À妽º Á¶ÀÛÀº ÀÚÁÖ µµ¿òÀÌ µË´Ï´Ù. ¶Ç, ¿¬»êÀÚ Å¬·¡½º¿Í °ü·ÃÇÑ µ¥ÀÌÅÍÇüÀ» °ÉÄ¡´Â ¿¬»êÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Â °æ¿ì, ´Ù¸¥ µ¥ÀÌÅÍÇüÀº µ¶ÀÚÀûÀÎ °ü·ÃÇÑ ¿¬»êÀÚ Å¬·¡½º¸¦ °¡Áö´Â ÀÏÀÌ ÀÚÁÖ ÀÖ½À´Ï´Ù. À̰ÍÀº °ð B-tree¿Í GiST À妽º ¸Þ¼Òµå¿¡ ÀÇÇØ Áö¿øµË´Ï´Ù.

B-Æ®¸®´Â °¢ ¿¬»êÀÚÀÇ ¿ÞÂÊ ¿ÀÆÛ·£µå°¡ Àε¥½ºµÈ µ¥ÀÌÅÍÇüÀ̾î¾ß ÇÏÁö¸¸, ¿À¸¥ÂÊ ¿ÀÆÛ·£µå´Â ´Ù¸¥ÇüÀÏ ¼ö ÀÖ½À´Ï´Ù.

CREATE OPERATOR CLASS int8_ops
DEFAULT FOR TYPE int8 USING btree AS
  -- standard int8 comparisons
  OPERATOR 1 < ,
  OPERATOR 2 <= ,
  OPERATOR 3 = ,
  OPERATOR 4 >= ,
  OPERATOR 5 > ,
  FUNCTION 1 btint8cmp(int8, int8) ,

  -- cross-type comparisons to int2 (smallint)
  OPERATOR 1 < (int8, int2) ,
  OPERATOR 2 <= (int8, int2) ,
  OPERATOR 3 = (int8, int2) ,
  OPERATOR 4 >= (int8, int2) ,
  OPERATOR 5 > (int8, int2) ,
  FUNCTION 1 btint82cmp(int8, int2) ,

  -- cross-type comparisons to int4 (integer)
  OPERATOR 1 < (int8, int4) ,
  OPERATOR 2 <= (int8, int4) ,
  OPERATOR 3 = (int8, int4) ,
  OPERATOR 4 >= (int8, int4) ,
  OPERATOR 5 > (int8, int4) ,
  FUNCTION 1 btint84cmp(int8, int4) ;

ÀÌ Á¤ÀÇ´Â ¿¬»êÀÚ Àü·« ÇÔ¼ö ¹øÈ£¿Í Áö¿ø ÇÔ¼ö ¹øÈ£¸¦ "µ¡¾²±â"ÇÏ´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä. ƯÁ¤ ¹øÈ£ÀÇ ÀνºÅϽº°¡ °¢°¢ ´Ù¸¥ ¿À¸¥ÂÊ ÀÔ·Â µ¥ÀÌÅÍÇüÀ» °¡Áö´Â ÇÑ, À̰ÍÀº Çã¿ëµË´Ï´Ù. Å©·Î½ºÇüÀÌ ¾Æ´Ñ ÀÎÀÚ´Â ¿¬»êÀÚŬ·¡½ºÀÇ ±âº»°ªÀ̰ųª ÁÖ ¿¬»êÀÚÀÔ´Ï´Ù.

GiST À妽º´Â Àü·« ¿À¹ö·ÎµùÀ̳ª Áö¿ø ±â´É ¼ö¸¦ Çã¿ëÇÏÁö ¾Ê½À´Ï´Ù¸¸, Áö¿øÀÌ ÇÊ¿äÇÑ °¢ ¿¬»êÀÚ¿¡ Àü·« ¼ö¸¦ ÇÒ´çÇÔÀ¸·Î½á, Áö¿øÇÏ´Â º¹¼öÀÇ ¿À¸¥ÂÊ µ¥ÀÌÅÍÇüÀÇ È¿°ú¸¦ °¡Áö´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù. °è¼ÓÀû Áö¿ø ÇÔ¼ö´Â ¾î¶² Àü·«¼ö¿¡ µû¶ó ÇÊ¿äÇÑ °ÍÀ» °áÁ¤Çϰí, ÀûÀýÇÑ µ¥ÀÌÅÍÇüÀÇ ºñ±³°ªÀ» ¹Þ¾ÆµéÀÏ Áغñ°¡ µÇ¾î¾ß ÇÕ´Ï´Ù.

33.14.6. ½Ã½ºÅÛÀÇ ¿¬»êÀÚ Å¬·¡½º¿¡ ´ëÇÑ ÀÇÁ¸¼º

PostgreSQL´Â ¿¬»êÀÚ Å¬·¡½º¸¦, ´ÜÁö À妽º·Î »ç¿ëÇÒ ¼ö ÀÖÀ»Áö ¾øÀ»Áö ¸¸ÀÌ ¾Æ´Ï°í, ¸¹Àº ¹æ½Ä¿¡¼­ ¿¬»êÀÚÀÇ ¼ºÁúÀ» ÃßÁ¤Çϱâ À§Çؼ­ »ç¿ëÇÕ´Ï´Ù. µû¶ó¼­, µ¥ÀÌÅÍÇüÀÇ ¿­À» À妽º ºÙÀÏ »ý°¢ÀÌ ¾ø¾îµµ, ¿¬»êÀÚ Å¬·¡½º¸¦ ÀÛ¼ºÇÏ´Â °ÍÀÌ ÁÁÀ» °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.

±¸Ã¼ÀûÀ¸·Î, ORDER BY³ª DISTINCT µî, °ªÀÇ ºñ±³¿Í Á¤·ÄÀ» ÇÊ¿ä·Î ÇÏ´Â SQL ±â´ÉÀÌ ÀÖ½À´Ï´Ù. »ç¿ëÀÚ Á¤ÀÇÀÇ µ¥ÀÌÅÍÇü¿¡ ´ëÇØ¼­ ÀÌ ±â´ÉÀ» ±¸ÇöÇϱâ À§Çؼ­, PostgreSQL´Â ±× µ¥ÀÌÅÍÇü¿ëÀÇ ±âº»°ªÀÇ B-tree ¿¬»êÀÚ Å¬·¡½º¸¦ °Ë»öÇÕ´Ï´Ù. ÀÌ ¿¬»êÀÚ Å¬·¡½ºÀÇ "µ¿ÀÏÇÑ" ±¸¼º¿øÀÌ, GROUP BY³ª DISTINCT¿ë °ªÀÇ µî°¡¼º¿¡ ´ëÇÑ ½Ã½ºÅÛÀÇ °³³äÀ» Á¤ÀÇÇØ, ÀÌ ¿¬»êÀÚ Å¬·¡½º¿¡ ÀÇÇØ °­Á¦´çÇÏ´Â Á¤·Ä¼ø¼­°¡, ±âº»°ªÀÇ ORDER BY¼ø¼­¸¦ Á¤ÀÇÇÕ´Ï´Ù.

¶Ç, »ç¿ëÀÚ Á¤ÀÇÇüÀÇ ¹è¿­ÀÇ ºñ±³´Â, ±âº»°ªÀÇ B-tree ¿¬»êÀÚ Å¬·¡½º¿¡ ÀÇÇØ Á¤ÀǵǴ Àǹ̷п¡ ÀÇÁ¸ÇÕ´Ï´Ù.

µ¥ÀÌÅÍÇü¿ëÀÇ ±âº»°ªÀÇ B-tree ¿¬»êÀÚ Å¬·¡½º°¡ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é ½Ã½ºÅÛÀº ±âº»°ªÀÇ ÇØ½Ã ¿¬»êÀÚ Å¬·¡½º¸¦ °Ë»öÇÕ´Ï´Ù. ±×·¯³ª, ÀÌ Á¾·ùÀÇ ¿¬»êÀÚ Å¬·¡½º´Â µî°¡¼º¸¸À» Á¦°øÇϱ⠶§¹®¿¡, ½ÇÁ¦·Î À̰ÍÀº, ¹è¿­ µî°¡¼ºÀ» Áö¿øÇϱ⿡ ÃæºÐÇÕ´Ï´Ù.

µ¥ÀÌÅÍÇü¿ëÀÇ ±âº»°ªÀÇ ¿¬»êÀÚ Å¬·¡½º°¡ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì¿¡, ÀÌ·¯ÇÑ SQL ±â´ÉÀ» µ¥ÀÌÅÍÇü¿¡ »ç¿ëÇÏ·Á°í Çϸé, "¿¬»êÀÚ Å¬·¡½º¸¦ ½Äº°ÇÒ ¼ö ¾ø¾ú´Ù"´Â ¿¡·¯°¡ µË´Ï´Ù.

Note: PostgreSQL¹öÀü 7.4º¸´Ù Àü±îÁö¿¡¼­´Â, Á¤·ÄÀ̳ª ±×·ìÈ­ Á¶ÀÛÀº ¾Ï¹¬ÀûÀ¸·Î =, <, >¶ó´Â À̸§ÀÇ ¿¬»êÀÚ¸¦ »ç¿ëÇϰí ÀÖ¾ú½À´Ï´Ù. ÀÌ »õ·Î¿î, ±âº»°ªÀÇ ¿¬»êÀÚ Å¬·¡½º¿¡ ÀÇÁ¸ÇÏ´Â Çൿ¿¡ ÀÇÇØ, ƯÁ¤ À̸§À» °¡Áö´Â ¿¬»êÀÚÀÇ Çൿ¿¡ ´ëÇØ ¾î¶°ÇÑ °¡Á¤À» ¼¼¿ì´Â °ÍÀ» ¹æÁöÇϰí ÀÖ½À´Ï´Ù.

33.14.7. ¿¬»êÀÚ Å¬·¡½ºÀÇ Æ¯¼öÇÑ ±â´É

¿¬»êÀÚ Å¬·¡½º¿¡´Â, ¾ÆÁ÷ ¼³¸íÇÏÁö ¾ÊÀº 2 °³ÀÇ Æ¯¼öÇÑ ±â´ÉÀÌ ÀÖ½À´Ï´Ù. ¼³¸íÇÏÁö ¾ÊÀº ÁÖµÈ ÀÌÀ¯´Â, °¡Àå ÀÚÁÖ »ç¿ëÇÏ´Â À妽º ¹æ¹ý¿¡¼­´Â, ±×´ÙÁö À¯¿ëÇÏÁö ¾Ê±â ¶§¹®ÀÔ´Ï´Ù.

Åë»ó, ¿¬»êÀÚ¸¦ ¿¬»êÀÚ Å¬·¡½ºÀÇ ¸â¹ö·Î¼­ ¼±¾ðÇϸé, À妽º ¹æ¹ýÀ¸·Î ±× ¿¬»êÀÚ¸¦ »ç¿ëÇØ, WHEREÁ¶°ÇÀ» ä¿ì´Â ÇàÀÇ ÁýÇÕÀ» Á¤È®ÇÏ°Ô ÃßÃâÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù. ÀÌÇÏ¿¡ ¿¹¸¦ ³ªÅ¸³À´Ï´Ù.

SELECT * FROM table WHERE integer_column < 4;

ÀÌ ½ÄÀº, Á¤¼ö¿­¿¡ B-tree À妽º¸¦ »ç¿ëÇØ Á¤È®ÇÏ°Ô Ã¤¿ï ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª, ÀÏÄ¡ÇÏ´Â Çà¿¡ ÀÏÄ¡ÇÏÁö ¾Ê´õ¶óµµ À̲ô´Â ¼ö´ÜÀ¸·Î¼­ À妽º°¡ À¯¿ëÇÑ °æ¿ì°¡ ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é, GiST À妽º·Î, °´Ã¼ÀÇ °æ°è ¹Ú½º¸¸À» ÀúÀåÇÕ´Ï´Ù. ±× °á°ú, ´Ù°¢Çü°ú °°Àº Á÷»ç°¢ÇüÀÌ ¾Æ´Ñ °´Ã¼¿Í Áߺ¹ÀÎÁö Å×½ºÆ®ÇÏ´Â WHERE Á¶°ÇÀº Á¤È®ÇÏ°Ô Ã¤¿ï ¼ö°¡ ¾ø½À´Ï´Ù. ¹«¾ùº¸´Ù, ÀÌ À妽º¸¦ »ç¿ëÇØ, ´ë»ó °´Ã¼ÀÇ °æ°è ¹Ú½º¿Í Áߺ¹µÇ´Â °æ°è ¹Ú½º¸¦ °¡Áö´Â °´Ã¼¸¦ °Ë»öÇϰí, »Ó¸¸ ¾Æ´Ï¶ó, °Ë»öµÈ °´Ã¼¿¡ ´ëÇØ¼­¸¸ Á¤È®ÇÏ°Ô °ãÄ¥Áö ¾Æ´ÒÁö¸¦ Å×½ºÆ®ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ·¯ÇÑ °æ¿ì, À妽º´Â, ¿¬»êÀÚ¿¡ ´ëÇØ "¼Õ½ÇÀÌ ¸¹Àº" °ÍÀÌ µË´Ï´Ù. °Å±â¼­, CREATE OPERATOR CLASS¸í·ÉÀÇ OPERATOR±¸¿¡, RECHECK¸¦ Ãß°¡ÇÕ´Ï´Ù. RECHECK´Â, À妽º°¡, ¸ðµç ÇÊ¿äÇÑ Çà, ¹× ¸î °³ÀÇ Ãß°¡ÀÇ ÇàÀÇ ¹ÝȯÀ» º¸ÁõÇÑ °æ¿ì¿¡ À¯È¿ÇÕ´Ï´Ù. ÀÌ Ãß°¡ÀÇ ÇàÀº, ¿ø·¡ÀÇ ¿¬»êÀÚ È£ÃâÀ» ½ÇÇàÇÏ´Â °Í¿¡ ÀÇÇØ Á¦°ÅÇÒ ¼ö ÀÖ½À´Ï´Ù.

´Ù°¢Çü°ú °°ÀÌ º¹ÀâÇÑ °´Ã¼ÀÇ °æ°è ¹Ú½º¸¸À» À妽º¿¡ ÀúÀåÇÏ´Â »óȲÀ» »ý°¢ÇØ º¸¼¼¿ä. ÀÌ °æ¿ì, À妽º ¿£Æ®¸®¿¡ ´Ù°¢Çü Àüü¸¦ ÀúÀåÇÏ´Â °ÍÀº, ±×¸¸Å­ À¯¿ëÇÑ ÀÏÀÌ ¾Æ´Õ´Ï´Ù. ´ÜÁö, º¸´Ù ´Ü¼øÇÑ boxÇüÀÇ °´Ã¼¸¦ ÀúÀåÇÏ´Â °ÍÀÌ ÁÁÀ»Áöµµ ¸ð¸¨´Ï´Ù. ÀÌ·¯ÇÑ »óȲÀº, CREATE OPERATOR CLASSÀÇ STORAGE¿É¼Ç¿¡ ÀÇÇØ Ç¥ÇöÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é, ÀÌÇÏ¿Í °°ÀÌ ±â¼úÇÕ´Ï´Ù.

CREATE OPERATOR CLASS polygon_ops
    DEFAULT FOR TYPE polygon USING gist AS
        ...
        STORAGE box;

ÇöÀç, GiST À妽º ¹æ¹ý°ú GIN À妽º ¹æ¹ýÀÌ, ¿­ÀÇ µ¥ÀÌÅÍÇü°ú ´Ù¸¥ STORAGEÇüÀ» Áö¿øÇϰí ÀÖ½À´Ï´Ù. STORAGE°¡ »ç¿ëµÇ¾úÀ» °æ¿ì, GiSTÀÇ compress ¹× decompressÁö¿ø ·çƾÀº, µ¥ÀÌÅÍÇüÀ» º¯È¯ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. GIN¿¡¼­´Â, STORAGEÇüÀº "Ű"ÀÇ °ªÀÇ ÇüŸ¦ ½Äº°ÇÕ´Ï´Ù. Åë»ó, À̰ÍÀº À妽º ºÙÀÎ ¿­ÀÇ ÇüÅ¿ʹ ´Ù¸¨´Ï´Ù. ¿¹¸¦ µé¸é, Á¤¼ö ¹è¿­ÀÇ ·Ä¿ëÀÇ ¿¬»êÀÚ Å¬·¡½º´Â °°Àº Á¤¼ö¸¦ Ű·Î¼­ °¡ÁúÁöµµ ¸ð¸¨´Ï´Ù. extractValue¹×extractQueryÁö¿ø ·çƾÀÌ, À妽º ºÙÀÎ °ªÀ¸·ÎºÎÅÍ Å°¸¦ ²¨³¾ Ã¥ÀÓÀ» °¡Áý´Ï´Ù.