| PostgreSQL 8.3.3¹®¼ | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 13. ¼º´ÉÈ¿À² ÆÁ | Fast Forward | Next |
ÀüÀý·Î ¼³¸íÇÑ ´ë·Î, Äõ¸® 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¿¡ ÀÇÇØ ¸¹Àº ¿ë·®ÀÌ ÇÊ¿äÇÏ°Ô µÇ¾î, ´Ù¼Ò ÃßÁ¤ °è»ê¿¡ °É¸®´Â ½Ã°£ÀÌ ¸¹¾ÆÁý´Ï´Ù. ¹Ý´ë·Î »óÇÑÀ» ³»¸®´Â °ÍÀº ´Ü¼øÇÑ µ¥ÀÌÅÍ ºÐÆ÷ÀÇ ¿¿¡ ´ëÇØ¼ ´ç¿¬ÇÕ´Ï´Ù.