| PostgreSQL 8.3.3¹®¼ | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 33. SQL È®Àå | Fast Forward | Next |
Áö±Ý±îÁö´Â, »õ·Î¿î Çüųª »õ·Î¿î ÇÔ¼ö, ¹× »õ·Î¿î ¿¬»êÀÚ¸¦ ¾î¶»°Ô Á¤ÀÇÇÒÁö¿¡ ´ëÇØ¼ ¼³¸íÇØ ¿Ô½À´Ï´Ù. ±×·¸Áö¸¸, »õ·Î¿î ÇüÅÂÀÇ ¿¿¡ ´ëÇÑ À妽º¸¦ ¾ÆÁ÷ ÀÛ¼ºÇÒ ¼ö°¡ ¾ø½À´Ï´Ù. ÀÌ ¶§¹®¿¡´Â, »õ·Î¿î µ¥ÀÌÅÍÇü¿¡ ´ëÇÑ ¿¬»êÀÚ Å¬·¡½º¸¦ Á¤ÀÇÇØ¾ßÇÕ´Ï´Ù. º»Àý¿¡¼´Â, º¹¼Ò¼ö¸¦ °ªÀÇ Àý´ë°ªÀÇ ¿À¸§Â÷¼ø Á¤·ÄÇØ ÀúÀåÇÏ´Â B-tree À妽º ¹æ¹ýÀ» »ç¿ëÇÑ »õ·Î¿î ¿¬»êÀÚ Å¬·¡½º¿¡ ´ëÇÑ ½ÇÇà ¿¹¸¦ ÀÌ¿ëÇØ, ¿¬»êÀÚ Å¬·¡½ºÀÇ °³³äÀ» ¼³¸íÇÕ´Ï´Ù.
Note: PostgreSQL 7.3 ¸±¸®½º ÀÌÀü±îÁö´Â, »ç¿ëÀÚ Á¤ÀÇµÈ ¿¬»ê Ŭ·¡½º¸¦ »ý¼ºÇϱâ À§ÇØ ½Ã½ºÅÛ ¸ñ·Ï
pg_amop,pg_amproc,pg_opclass¸¦ ¸Þ´º¾ó¿¡ Ãß°¡ÇØ¾ß Çß½À´Ï´Ù. ÀÌ·± Á¢±Ù¹æ½ÄÀº »ç¿ëÀÌ ÁßÁöµÇ¾ú½À´Ï´Ù. CREATE OPERATOR CLASS °¡ ÈξÀ °£´ÜÇÏ°í ¿¡·¯°¡ ÀûÀº ÇÊ¿ä ¸ñ·Ï ¿£Æ®¸®ÀÇ »ý¼º ¹æ¹ýÀ̱⠶§¹®ÀÔ´Ï´Ù.
pg_amÅ×ÀÌºí¿¡´Â °¢ À妽º ¹æ¹ý(³»ºÎ¿¡¼´Â Á¢¼Ó ¹æ¹ýÀ¸·Î¼ ¾Ë·ÁÁ® ÀÖ½À´Ï´Ù)¿¡ ´ëÇØ¼ 1°³ÀÇ ÇàÀÌ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.
Å×ÀÌºí¿¡ÀÇ º¸ÅëÀÇ Á¢¼Ó Áö¿øÀº PostgreSQL¿¡ ³»ÀåµÅÀÖ½À´Ï´Ù¸¸,
¸ðµç À妽º ¹æ¹ýÀº, pg_am·Î ±â¼úµÇ°í ÀÖ½À´Ï´Ù.
ÇÊ¿äÇÏ°Ô µÇ´Â ÀÎÅÍÆäÀ̽º ·çƾÀ» Á¤ÀÇÇÑ ÈÄ, pg_am¿¡ ÇàÀ» ÀÛ¼ºÇÏ´Â °Í¿¡ ÀÇÇØ, »õ·Î¿î À妽º ¹æ¹ýÀ» Ãß°¡ÇÏ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù.
±×·¯³ª, ÀÌ ¹æ¹ý¿¡ ´ëÇÑ ¼³¸íÀº º»Àå¿¡¼ÀÇ ¹üÀ§¸¦ ³Ñ°í ÀÖ½À´Ï´Ù(Chapter 49¸¦ ÂüÁ¶ÇØ ÁÖ¼¼¿ä).
À妽º ¹æ¹ýÀÇ ·çƾ¿¡´Â, Á÷Á¢ÀûÀ¸·Î À妽º ¹æ¹ýÀÌ ¿¬»êÇÏ´Â µ¥ÀÌÅÍÇüÀÇ Á¤º¸´Â ¾Æ¹«°Íµµ ÁÖ¾îÁö°í ÀÖÁö ¾Ê½À´Ï´Ù. ´ë½Å¿¡, ¿¬»êÀÚ Å¬·¡½º°¡, ƯÁ¤ÀÇ µ¥ÀÌÅÍÇüÀÇ Á¶ÀÛ¿¡ ´ëÇØ À妽º ¹æ¹ýÀ» »ç¿ëÇÒ Çʿ䰡 ÀÖ´Â ¿¬»êÀÇ ÁýÇÕÀ» ½Äº°ÇÕ´Ï´Ù. ¿¬»êÀÚ Å¬·¡½º¶ó´Â À̸§ÀÇ À¯·¡´Â, ±×°ÍµéÀÌ ÁöÁ¤ÇÏ´Â °ÍÀÇ 1°³¿¡ À妽º·Î »ç¿ëÇÒ ¼ö ÀÖ´Â (Áï, À妽º °Ë»ö Á¶°ÇÀ¸·Î º¯È¯ÇÒ ¼ö ÀÖ´Ù) WHERE±¸ ¿¬»êÀÚÀÇ ÁýÇÕÀÌ Àֱ⠶§¹®ÀÔ´Ï´Ù. ¶Ç, ¿¬»êÀÚ Å¬·¡½º´Â, À妽º ¹æ¹ýÀÇ ³»ºÎ ¿¬»êÀ¸·Î ÇÊ¿äÇÑ, ±×·¯³ª À妽º·Î »ç¿ëÇÒ ¼ö ÀÖ´Â WHERE±¸ ¿¬»êÀÚ¿¡´Â Á÷Á¢ÀûÀ¸·Î´Â ´ëÀÀÇÏÁö ¾Ê´Â, Áö¿ø ÇÁ·Î½ÃÀú¸¦ ¸î°³ ÁöÁ¤ÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù.
°°Àº ÀÔ·Â µ¥ÀÌÅÍÇü ¹× À妽º ¹æ¹ý¿¡ ´ëÇØ¼ º¹¼öÀÇ ¿¬»êÀÚ Å¬·¡½º¸¦ Á¤ÀÇÇÏ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù. À̰Ϳ¡ ÀÇÇØ, 1°³ÀÇ µ¥ÀÌÅÍÇü¿¡ ´ëÇØ¼, À妽ººÎ Àǹ̷ÐÀÇ ´Ù¼öÀÇ ÁýÇÕÀ» Á¤ÀÇÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿¹¸¦ µé¸é, B-tree À妽º¿¡¼´Â, ó¸®ÇÏ´Â µ¥ÀÌÅÍÇü ¸¶´Ù Á¤·Ä¼ø¼¸¦ Á¤ÀÇÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. º¹¼Ò¼ö µ¥ÀÌÅÍÇü¿¡¼´Â, º¹¼Ò¼öÀÇ Àý´ë°ª¿¡ ÀÇÇØ µ¥ÀÌÅ͸¦ Á¤·ÄÇÏ´Â B-tree ¿¬»êÀÚ Å¬·¡½º¿Í ½ÇºÎÀÇ ¼öÄ¡¿¡ ÀÇÇØ Á¤·ÄÇÏ´Â B-tree ¿¬»êÀÚ Å¬·¡½º¸¦ °®´Â ¹æ¹ýÀº, À¯¿ëÇÒ°ÍÀÔ´Ï´Ù. Åë»óÀº ¿¬»êÀÚ Å¬·¡½ºÀÇ Çϳª°¡ ÀϹÝÀûÀ¸·Î °¡Àå À¯¿ëÇÏ´Ù°í ÆÇ´ÜµÇ¾î ±× µ¥ÀÌÅÍÇü ¹× À妽º¹æ¹ý¿¡ ´ëÇÑ ±âº»°ªÀÇ ¿¬»êÀÚ Å¬·¡½º·Î¼ ¼³Á¤µË´Ï´Ù.
¸î¸îÀÇ ´Ù¸¥ À妽º ¹æ¹ý¿¡, µ¿ÀÏÇÑ ¿¬»êÀÚ Å¬·¡½º¸íÀ» »ç¿ëÇÒ ¼ö°¡ ÀÖ½À´Ï´Ù (¿¹¸¦ µé¸é, B-tree¿Í ÇØ½Ã À妽º ¹æ¹ýÀº, µÑ ´Ù int4_ops¶ó´Â À̸§ÀÇ ¿¬»êÀÚ Å¬·¡½º¸¦ °¡Áú ¼ö°¡ ÀÖ½À´Ï´Ù). ´Ù¸¸, ±×·¯ÇÑ °¢ Ŭ·¡½º´Â µ¶¸³µÈ ½ÇüÀ̸ç, µû·Î µû·Î Á¤ÀÇµÉ Çʿ䰡 ÀÖ½À´Ï´Ù.
¿¬»êÀÚ Å¬·¡½º¿¡ °ü·ÃÁöÀ» ¼ö ÀÖ´Â ¿¬»êÀÚ´Â, "Àü·« ¹øÈ£"¿¡ ÀÇÇØ ½Äº°µË´Ï´Ù. "Àü·« ¹øÈ£"´Â, ¿¬»êÀÚ Å¬·¡½ºÀÇ ¹®¸Æ ³»ÀÇ °¢ ¿¬»êÀÚÀÇ Àǹ̷ÐÀ» ½Äº°Çϱâ À§ÇÑ °ÍÀÔ´Ï´Ù. ¿¹¸¦ µé¸é, B-treeÀÇ °æ¿ì, ۰¡ ÀÛÀº ÂÊ¿¡¼ Å« ÂÊÀ¸·Î ¾ö°ÝÇÏ°Ô ÁÙÁö¾î ÀÖ¾î¾ßÇÕ´Ï´Ù. µû¶ó¼, B-tree¿¡ °üÇØ¼, "º¸´Ù ÀÛ°í" "´õ Å©°Å³ª" µ¿ÀÏÇÑ ¿¬»êÀÚ´Â Èï¹Ì·Ó½À´Ï´Ù. PostgreSQL¿¡¼´Â »ç¿ëÀÚ°¡ ¿¬»êÀÚ¸¦ Á¤ÀÇÇÒ ¼ö Àֱ⠶§¹®¿¡, PostgreSQL´Â ¿¬»êÀÚÀÇ À̸§(¿¹¸¦ µé¸é <³ª >=)À» ã¾Æ³»µµ, ±× ¿¬»êÀÚ°¡ ¾î¶°ÇÑ ºñ±³¸¦ ½Ç½ÃÇÒÁö ÆÇ´ÜÇÒ ¼ö ¾ø½À´Ï´Ù. ±× ´ë½ÅÇØ, À妽º ¹æ¹ýÀº "Àü·«"ÀÇ ÁýÇÕÀ» Á¤ÀÇÇÕ´Ï´Ù. "Àü·«"´Â, ¹ü¿ë ¿¬»êÀÚ¶ó°í »ý°¢ÇÒ ¼ö ÀÖ½À´Ï´Ù. °¢ ¿¬»êÀÚ Å¬·¡½º´Â, ƯÁ¤ÀÇ µ¥ÀÌÅÍÇü ¹× À妽º Àǹ̷ÐÀÇ ÇØ¼®¿¡ ÀÖ¾î, ½ÇÁ¦ÀÇ ¾î´À ¿¬»êÀÚ°¡ °¢ Àü·«¿¡ ´ëÀÀÇÏ´ÂÁö¸¦ ÁöÁ¤ÇÕ´Ï´Ù.
Table 33-2¿¡ ³ªÅ¸³ªµíÀÌ, B-tree À妽º ¹æ¹ý¿¡¼´Â Àü·«À» 5°³ Á¤ÀÇÇÕ´Ï´Ù.
ÇØ½Ã À妽º´Â, ºñÆ®¸¶´ÙÀÇ µî°¡¼º¸¸À» Áö¿øÇÕ´Ï´Ù. µû¶ó¼, 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¿¡ ³ªÅ¸³À´Ï´Ù.
¸ðµç Àü·« ¿¬»êÀÚ´Â ³í¸®°ªÀ» ¹ÝȯÇÏ´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä. ½ÇÁ¦, À妽º·Î »ç¿ëµÇ±â À§Çؼ WHEREÀÇ ÃÖ»óÁ¤µµ ·¹º§·Î ³ªÅ¸³ª¾ß Çϱ⠶§¹®¿¡, À妽º ¹æ¹ý Àü·«À¸·Î¼ Á¤ÀÇµÈ ¸ðµç ¿¬»êÀÚÀÇ ¹Ýȯ°ªÀÇ ÇüÅ´ boolean°¡ ¾Æ´Ï¸é ¾ÈµË´Ï´Ù.
Àü·«Àº Åë»ó, ½Ã½ºÅÛÀÌ À妽º¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ» ÆÇ´ÜÇϱâ À§Çؼ(¶§¹®¿¡) ÃæºÐÇÑ Á¤º¸°¡ ¾Æ´Õ´Ï´Ù. ½ÇÁ¦·Î´Â, À妽º ¹æ¹ýÀº, ÀÛ¾÷À» À§Çؼ(¶§¹®¿¡) Ãß°¡ÀÇ Áö¿ø ·çƾÀ» ÇÊ¿ä·Î ÇÕ´Ï´Ù. ¿¹¸¦ µé¸é 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-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¿ëÀÇ ºñ±³ ÇÔ¼öÀÇ °æ¿ì, ºÎÈ£ ÷ºÎ Á¤¼ö¸¦ µ¹·ÁÁÝ´Ï´Ù.
¿©±â±îÁö·Î °³³ä¿¡ ´ëÇØ ¼³¸íÇØ ¿Ô½À´Ï´Ù. ¿©±â¼, »õ·Î¿î ¿¬»êÀÚ Å¬·¡½º¸¦ ÀÛ¼ºÇÏ´Â À¯¿ëÇÑ ¿¹¸¦ ¼Ò°³ÇÕ´Ï´Ù (ÀÌ ¿¹¸¦ ÀÛ¾÷ÇÒ ¼ö ÀÖµµ·Ï, ¹èÆ÷µÈ ¼Ò½º³»¿¡ 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
);
¿Ã¹Ù¸£°Ô ±³È¯ ¿¬»êÀÚ¿Í ºÎÁ¤ÀÚ ¿¬»êÀÚ¸¦ ÁöÁ¤ÇÏ´Â °Í ¿Ü¿¡µµ, ÀûÀýÇÑ Á¦ÇÑ ¼±Åüº ÇÔ¼ö¿Í °áÇÕ ÇÔ¼ö¸¦ ÁöÁ¤ÇÏ´Â °ÍÀÌ Áß¿äÇÕ´Ï´Ù. ±×·¸Áö ¾ÊÀ¸¸é, ÃÖÀûÈ´Â À妽º¸¦ È¿À²ÀûÀ¸·Î »ç¿ëÇÒ ¼ö°¡ ¾ø½À´Ï´Ù. ´õ À۰ųª, µ¿ÀÏÇϰųª, ´õ Å« °æ¿ì¿¡ ´Ù¸¥ ¼±Åüº ÇÔ¼ö¸¦ »ç¿ëÇØ¾ß ÇÏ´Â °Í¿¡ ÁÖÀÇÇØ ÁÖ¼¼¿ä.
±× ¹Û¿¡µµ, °ªÀÌ ¾ø´Â °ÍÀÌ ¿©±â¼ ¹ß»ýÇÕ´Ï´Ù.
¿¹¸¦ µé¸é, complexÇüÀ» ¾çÂÊ ¿ÀÆÛ·£µå¿¡ ÃëÇÑ= À̸§ÀÇ ¿¬»êÀÚ¸¦ 1°³ ¹Û¿¡ ÀÛ¼ºÇÒ ¼ö ¾ø½À´Ï´Ù.
ÀÌ °æ¿ì, complex¿ëÀÇ ´Ù¸¥ =¿¬»êÀÚ¸¦ °¡Áú ¼ö ¾ø½À´Ï´Ù.
±×·¯³ª, ½ÇÁ¦·Î µ¥ÀÌÅÍÇüÀ» ÀÛ¼ºÇϸé, º¹¼Ò¼öÀÇ(Àý´ë°ªÀÇ µî°¡¼ºÀÌ ¾Æ´Ï´Ù) Åë»óÀÇ µî°¡¼º ¿¬»êÀ» ½Ç½ÃÇÏ´Â =À» ¹Ù¶ö °ÍÀÔ´Ï´Ù.
ÀÌ °æ¿ì, complex_abs_eq¿ëÀÇ ¿¬»êÀÚ¸í¿¡ ´Ù¸¥ À̸§À» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù.
PostgreSQL¿¡¼´Â, ´Ù¸¥ ÀÎÀÚÀÇ µ¥ÀÌÅÍÇüÀÌ¸é °°Àº SQL¸íÀÇ ¿¬»êÀÚ¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù¸¸, C¿¡¼´Â 1°³ÀÇ À̸§À¸·Î 1°³ÀÇ ±Û·Î¹ú ÇÔ¼ö¸¦ »ç¿ëÇÒ ¼ö ÀÖÀ» »ÓÀÔ´Ï´Ù. ±×·¡¼, CÇÔ¼ö´Â abs_eq¿Í °°ÀÌ ´Ü¼øÇÑ À̸§À¸·Î ÇØ¾ß¸¸ ÇÏ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. Åë»óÀº, ´Ù¸¥ µ¥ÀÌÅÍÇüÀÇ ÇÔ¼ö°¡ Ãæµ¹ÇÏÁö ¾Ê°Ô, CÇÔ¼ö¸í¿¡ µ¥ÀÌÅÍÇü¸íÀ» ³Ö¾î µÎ´Â °ÍÀ» ±ÇÇÕ´Ï´Ù.
abs_eqÇÔ¼öÀÇ SQL¸íÀº, PostgreSQL°¡ ÀÎÀÚÀÇ µ¥ÀÌÅÍÇü¿¡ ÀÇÇØ °°Àº À̸§À» °¡Áö´Â ´Ù¸¥ SQL ÇÔ¼ö·ÎºÎÅÍ ±¸º°ÇØ ÁÖ±â À§ÇØ ¸¸µé ¼ö ÀÖ½À´Ï´Ù. ¿©±â¿¡¼´Â ¿¹¸¦ °£´ÜÇÏ°Ô Çϱâ À§Çؼ, ÇÔ¼ö¿¡ C·¹º§°ú SQL ·¹º§·Î °°Àº À̸§À» ÁÖ°í ÀÖ½À´Ï´Ù.
´ÙÀ½ÀÇ ½ºÅÜÀº, 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¶ó°í ÇÏ´Â ´Ü¾î¸¦ ¾ø¾Ö ÁÖ¼¼¿ä.
Áö±Ý±îÁö´Â ¾Ï¹¬ÀûÀ¸·Î, ¿¬»êÀÚ Å¬·¡½º´Â 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 À妽º´Â Àü·« ¿À¹ö·ÎµùÀ̳ª Áö¿ø ±â´É ¼ö¸¦ Çã¿ëÇÏÁö ¾Ê½À´Ï´Ù¸¸, Áö¿øÀÌ ÇÊ¿äÇÑ °¢ ¿¬»êÀÚ¿¡ Àü·« ¼ö¸¦ ÇÒ´çÇÔÀ¸·Î½á, Áö¿øÇÏ´Â º¹¼öÀÇ ¿À¸¥ÂÊ µ¥ÀÌÅÍÇüÀÇ È¿°ú¸¦ °¡Áö´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù. °è¼ÓÀû Áö¿ø ÇÔ¼ö´Â ¾î¶² Àü·«¼ö¿¡ µû¶ó ÇÊ¿äÇÑ °ÍÀ» °áÁ¤Çϰí, ÀûÀýÇÑ µ¥ÀÌÅÍÇüÀÇ ºñ±³°ªÀ» ¹Þ¾ÆµéÀÏ Áغñ°¡ µÇ¾î¾ß ÇÕ´Ï´Ù.
PostgreSQL´Â ¿¬»êÀÚ Å¬·¡½º¸¦, ´ÜÁö À妽º·Î »ç¿ëÇÒ ¼ö ÀÖÀ»Áö ¾øÀ»Áö ¸¸ÀÌ ¾Æ´Ï°í, ¸¹Àº ¹æ½Ä¿¡¼ ¿¬»êÀÚÀÇ ¼ºÁúÀ» ÃßÁ¤Çϱâ À§Çؼ »ç¿ëÇÕ´Ï´Ù. µû¶ó¼, µ¥ÀÌÅÍÇüÀÇ ¿À» À妽º ºÙÀÏ »ý°¢ÀÌ ¾ø¾îµµ, ¿¬»êÀÚ Å¬·¡½º¸¦ ÀÛ¼ºÇÏ´Â °ÍÀÌ ÁÁÀ» °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.
±¸Ã¼ÀûÀ¸·Î, ORDER BY³ª DISTINCT µî, °ªÀÇ ºñ±³¿Í Á¤·ÄÀ» ÇÊ¿ä·Î ÇÏ´Â SQL ±â´ÉÀÌ ÀÖ½À´Ï´Ù. »ç¿ëÀÚ Á¤ÀÇÀÇ µ¥ÀÌÅÍÇü¿¡ ´ëÇØ¼ ÀÌ ±â´ÉÀ» ±¸ÇöÇϱâ À§Çؼ, PostgreSQL´Â ±× µ¥ÀÌÅÍÇü¿ëÀÇ ±âº»°ªÀÇ B-tree ¿¬»êÀÚ Å¬·¡½º¸¦ °Ë»öÇÕ´Ï´Ù. ÀÌ ¿¬»êÀÚ Å¬·¡½ºÀÇ "µ¿ÀÏÇÑ" ±¸¼º¿øÀÌ, GROUP BY³ª DISTINCT¿ë °ªÀÇ µî°¡¼º¿¡ ´ëÇÑ ½Ã½ºÅÛÀÇ °³³äÀ» Á¤ÀÇÇØ, ÀÌ ¿¬»êÀÚ Å¬·¡½º¿¡ ÀÇÇØ °Á¦´çÇÏ´Â Á¤·Ä¼ø¼°¡, ±âº»°ªÀÇ ORDER BY¼ø¼¸¦ Á¤ÀÇÇÕ´Ï´Ù.
¶Ç, »ç¿ëÀÚ Á¤ÀÇÇüÀÇ ¹è¿ÀÇ ºñ±³´Â, ±âº»°ªÀÇ B-tree ¿¬»êÀÚ Å¬·¡½º¿¡ ÀÇÇØ Á¤ÀǵǴ Àǹ̷п¡ ÀÇÁ¸ÇÕ´Ï´Ù.
µ¥ÀÌÅÍÇü¿ëÀÇ ±âº»°ªÀÇ B-tree ¿¬»êÀÚ Å¬·¡½º°¡ Á¸ÀçÇÏÁö ¾ÊÀ¸¸é ½Ã½ºÅÛÀº ±âº»°ªÀÇ ÇØ½Ã ¿¬»êÀÚ Å¬·¡½º¸¦ °Ë»öÇÕ´Ï´Ù. ±×·¯³ª, ÀÌ Á¾·ùÀÇ ¿¬»êÀÚ Å¬·¡½º´Â µî°¡¼º¸¸À» Á¦°øÇϱ⠶§¹®¿¡, ½ÇÁ¦·Î À̰ÍÀº, ¹è¿ µî°¡¼ºÀ» Áö¿øÇϱ⿡ ÃæºÐÇÕ´Ï´Ù.
µ¥ÀÌÅÍÇü¿ëÀÇ ±âº»°ªÀÇ ¿¬»êÀÚ Å¬·¡½º°¡ Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì¿¡, ÀÌ·¯ÇÑ SQL ±â´ÉÀ» µ¥ÀÌÅÍÇü¿¡ »ç¿ëÇÏ·Á°í Çϸé, "¿¬»êÀÚ Å¬·¡½º¸¦ ½Äº°ÇÒ ¼ö ¾ø¾ú´Ù"´Â ¿¡·¯°¡ µË´Ï´Ù.
Note: PostgreSQL¹öÀü 7.4º¸´Ù Àü±îÁö¿¡¼´Â, Á¤·ÄÀ̳ª ±×·ìÈ Á¶ÀÛÀº ¾Ï¹¬ÀûÀ¸·Î =, <, >¶ó´Â À̸§ÀÇ ¿¬»êÀÚ¸¦ »ç¿ëÇϰí ÀÖ¾ú½À´Ï´Ù. ÀÌ »õ·Î¿î, ±âº»°ªÀÇ ¿¬»êÀÚ Å¬·¡½º¿¡ ÀÇÁ¸ÇÏ´Â Çൿ¿¡ ÀÇÇØ, ƯÁ¤ À̸§À» °¡Áö´Â ¿¬»êÀÚÀÇ Çൿ¿¡ ´ëÇØ ¾î¶°ÇÑ °¡Á¤À» ¼¼¿ì´Â °ÍÀ» ¹æÁöÇϰí ÀÖ½À´Ï´Ù.
¿¬»êÀÚ Å¬·¡½º¿¡´Â, ¾ÆÁ÷ ¼³¸íÇÏÁö ¾ÊÀº 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Áö¿ø ·çƾÀÌ, À妽º ºÙÀÎ °ªÀ¸·ÎºÎÅÍ Å°¸¦ ²¨³¾ Ã¥ÀÓÀ» °¡Áý´Ï´Ù.