13.2. planner·Î »ç¿ëµÇ´Â Åë°è Á¤º¸

ÀüÀý·Î ¼³¸íÇÑ ´ë·Î, Äõ¸® planner´Â º¸´Ù ÁÁÀº Äõ¸® °èȹÀ» ¼±ÅÃÇϱâ À§Çؼ­ Äõ¸®ÇØ¿¡ ÀÇÇØ ²¨³»Áö´Â Çà¼öÀÇ ÃßÁ¤Ä¡¸¦ ÇÊ¿ä·Î Çϰí ÀÖ½À´Ï´Ù. º» Àý¿¡¼­´Â ½Ã½ºÅÛÀÌ ÀÌ ÃßÁ¤¿¡ »ç¿ëÇÏ´Â Åë°è Á¤º¸¿¡ ´ëÇØ °£´ÜÇÏ°Ô ¼³¸íÇÕ´Ï´Ù.

Åë°è Á¤º¸ÀÇ ÇϳªÀÇ ¿ø°¡¿ä¼Ò´Â °¢ Å×À̺í°ú À妽ºÀÇ Ç׸ñÀÇ ÃѼö¿Í °¢ Å×À̺í°ú À妽º°¡ Â÷ÁöÇÏ´Â µð½ºÅ© ºí·Ï¼öÀÔ´Ï´Ù. ÀÌ Á¤º¸´Â pg_class ÀÇreltuples¿Í relpages¿­¿¡ º¸°ü À¯ÁöµË´Ï´Ù. ÀÌÇÏ¿Í °°ÀÌ Äõ¸®ÇØ¿¡ ÀÇÇØ À̰ÍÀ» ÂüÁ¶ÇÒ ¼ö ÀÖ½À´Ï´Ù.

SELECT relname, relkind, reltuples, relpages FROM pg_class WHERE relname LIKE 'tenk1%';

       relname        | relkind | reltuples | relpages
----------------------+---------+-----------+----------
 tenk1                | r       |     10000 |      358
 tenk1_hundred        | i       |     10000 |       30
 tenk1_thous_tenthous | i       |     10000 |       30
 tenk1_unique1        | i       |     10000 |       30
 tenk1_unique2        | i       |     10000 |       30
(5 rows)

¿©±â¼­, tenk1¿Í ±× À妽º¿¡´Â 10000ÇàÀÌ Á¸ÀçÇØ, ±×¸®°í (³î¶ó·Á¸é »ó´çÇÏÁö ¾Ê½À´Ï´Ù¸¸) À妽º´Â Å×ÀÌºíº¸´Ù ²Ï ÀÛÀº °ÍÀÓÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù.

È¿À²À» ¿Ã¸®±â ¶§¹®¿¡, reltuples¿Í relpages´Â ó¸®ÀÇ ¹ø¿¡´Â °»½ÅµÇÁö ¾Ê°í, µû¶ó º¸ÅëÀº ´Ù¼Ò ¿À·¡µÈ °ª¸¸ ¼ÒÀ¯Çϰí ÀÖ½À´Ï´Ù. À̰͵éÀºVACUUM, ANALYZE, CREATE INDEXµîÀÇ ÀϺÎÀÇ DDL Ä¿¸Çµå¿¡ ÀÇÇØ °»½ÅµË´Ï´Ù. ½ºÅĵå¾ó·ÐÀÇANALYZE, ÁïVACUUMÀÇ ÀϺο¡¼­´Â ¾ø´Â Ä¿¸Çµå´Â Å×À̺íÀÇ ¸ðµç ÇàÀ» ÀÐÁö ¾ÊÀ¸¹Ç·Î, reltuplesÀÇ °³»êÄ¡¸¦ »ý¼ºÇÕ´Ï´Ù. planner´Â ÇöÀçÀÇ ¹°¸®ÀûÀÎ Å×À̺í Å©±â¿¡ ¸ÂÃß±â À§Çؼ­pg_class·ÎºÎÅÍ °Ë»öÇÑ °ªÀ» Á¶Á¤ÇØ, º¸´Ù °íÁ¤¹ÐÀÇ ±Ù»çÄ¡¸¦ °¡Áý´Ï´Ù.

´ëºÎºÐÀÇ Äõ¸®´Â °ËÁõµÇ´Â ÇàÀ» Á¦ÇÑÇÏ´Â WHERE±¸¹®ÀÌ ÀÖ´Â °Í¿¡ ÀÇÇØ, Å×ÀÌºí ³»ÀÇ ÇàÀÇ ÀϺθ¸À» ²¨³À´Ï´Ù. µû¶ó¼­, planner´Â WHERE±¸¹®ÀǼ±Åüº, ÁïWHERE±¸¹®ÀÇ °¢ Á¶°Ç¿¡ ¾ó¸¶³ªÀÇ ÇàÀÌ ÀÏÄ¡ÇÏ´ÂÁö¸¦ ÃßÁ¤ÇÒ Çʿ䰡 ÀÖ½À´Ï´Ù. ÀÌ Ã³¸®¿¡ »ç¿ëµÇ´Â Á¤º¸´Â pg_statistic ½Ã½ºÅÛ Ä«Å»·Î±×³»¿¡ ÀúÀåµË´Ï´Ù. pg_statistic³»ÀÇ Ç׸ñÀº ANALYZE¿Í VACUUM ANALYZEÄ¿¸Çµå¿¡ ÀÇÇØ °»½ÅµÇ¾î ¶Ç 1À¸·ÎºÎÅÍ °»½ÅÀÌ °É·È´Ù°í ÇØµµ Ç×»ó °³»êÄ¡°¡ µË´Ï´Ù.

Åë°è Á¤º¸¸¦ ¼öµ¿À¸·Î È®ÀÎÇÏ´Â °æ¿ì, pg_statistic¸¦ Á÷Á¢ ÂüÁ¶ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó, pg_statsºä¸¦ ÂüÁ¶ÇÏ´Â ÆíÀÌ ÁÁÀ» °ÍÀÔ´Ï´Ù. pg_stats´Â º¸´Ù Àб⠽¬¿öÁöµµ·Ï ¼³°èµÇ°í ÀÖ½À´Ï´Ù. °Ô´Ù°¡pg_stats´Â ´©±¸¶óµµ Àо ¼ö ÀÖÁö¸¸, pg_statistic´Â ½´ÆÛ À¯Àú¸¸ Àо ¼ö ÀÖ½À´Ï´Ù (ÀÌ´Â ºñƯ±Ç À¯Àú°¡ Åë°è Á¤º¸·ÎºÎÅÍ Å¸ÀÎÀÇ Å×À̺íÀÇ ³»¿ë¿¡ °ü·ÃµÇ´Â »çÇ×À» Àо´Â °ÍÀ» ¹æÁöÇÕ´Ï´Ù. pg_statsºä´Â ÇöÀçÀÇ À¯Àú°¡ Àо ¼ö°¡ ÀÖ´Â Å×ÀÌºí¿¡ °üÇÑ ÇุÀ» Ç¥½ÃÇϵµ·Ï Á¦Çѵǰí ÀÖ½À´Ï´Ù). ¿¹¸¦ µé¸é, ÀÌÇϸ¦ ½Ç½ÃÇÒ ¼ö ÀÖ½À´Ï´Ù.

SELECT attname, n_distinct, most_common_vals FROM pg_stats WHERE tablename = 'road';

 attname | n_distinct |                                                                                                                                                                                  most_common_vals                                                                                                                                                                                   
---------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 name    |  -0.467008 | {"I- 580                        Ramp","I- 880                        Ramp","Sp Railroad                       ","I- 580                            ","I- 680                        Ramp","I- 80                         Ramp","14th                          St  ","5th                           St  ","Mission                       Blvd","I- 880                            "}
 thepath |         20 | {"[(-122.089,37.71),(-122.0886,37.711)]"}
(2 rows)

pg_stats is described in detail in Section 43.46.

pg_statistic¿¡ ÀúÀåµÇ´Â Á¤º¸·®, ƯÈ÷, °¢°¢ÀÇ ¿­¿¡ ´ëÇÑmost_common_vals³»¿Íhistogram_bounds¹è¿­ÀÇ ¿£Æ®¸®ÀÇ ÃÖ´ë¼ö´Â ALTER TABLE SET STATISTICSÄ¿¸Çµå¿¡ ÀÇÇØ ¿­ ¸¶´Ù, default_statistics_target¼³Á¤ ÆÄ¶ó¹ÌÅ͸¦ ¼³Á¤ÇÏ´Â °Í¿¡ ÀÇÇØ ±Û·Î¹ú·Î ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÇöÀçÀÇ µðÆúÆ®ÀÇ »óÇÑÀº 10 ¿£Æ®¸®ÀÔ´Ï´Ù. ÀÌ »óÇÑÀ» ¿Ã¸®´Â °ÍÀ¸·Î, ƯÈ÷, ºñÁ¤±Ô ºÐÆ÷ÀÇ µ¥ÀÌÅ͸¦ °¡Áö´Â ¿­·Î º¸´Ù Á¤È®ÇÑ plannerÀÇ ÃßÁ¤À» ÇÏÁö¸¸, pg_statistic¿¡ ÀÇÇØ ¸¹Àº ¿ë·®ÀÌ ÇÊ¿äÇÏ°Ô µÇ¾î, ´Ù¼Ò ÃßÁ¤ °è»ê¿¡ °É¸®´Â ½Ã°£ÀÌ ¸¹¾ÆÁý´Ï´Ù. ¹Ý´ë·Î »óÇÑÀ» ³»¸®´Â °ÍÀº ´Ü¼øÇÑ µ¥ÀÌÅÍ ºÐÆ÷ÀÇ ¿­¿¡ ´ëÇØ¼­ ´ç¿¬ÇÕ´Ï´Ù.