9.3 рдлрд╝реАрдЪрд░ рд╣рд╛рдЗрд▓рд╛рдЗрдЯреНрд╕: рднреМрддрд┐рдХрдХреГрдд рджреГрд╢реНрдп

PostgreSQL 9.3 рдПрдХ рдорд╕реНрдд рд╢рд╛рдВрдд рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде рдЖрдПрдЧрд╛ рдЬрд┐рд╕реЗ рднреМрддрд┐рдХ рд╡рд┐рдЪрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдХреЗрд╡рд┐рди рдЧреНрд░рд┐рдЯрдирд░ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХреА рдЧрдИ рдереА рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╢реБрд░реВ рдХреА рдЧрдИ рдереА:

рдкреНрд░рддрд┐рдмрджреНрдз 3bf3ab8c563699138be02f9dc305b7b77a724307
рджрд┐рдирд╛рдВрдХ: рд░рд╡рд┐рд╡рд╛рд░ 4 рдорд╛рд░реНрдЪ рдХреЛ 18:23:31 2013 -0600
рджреНрд╡рд╛рд░рд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛: рдХреЗрд╡рд┐рди рдЧреНрд░рд┐рдЯрдирд░

рднреМрддрд┐рдХрд╡рд╛рджреА рджреГрд╢реНрдп рдЬреЛрдбрд╝реЗ рдЧрдП

рдПрдХ рднреМрддрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдПрдХ рдирд┐рдпрдо рд╣реИ, рдПрдХ рдирд┐рдпрдорд┐рдд рджреГрд╢реНрдп рдХреА рддрд░рд╣, рдФрд░ рдПрдХ рдЧреБрдЪреНрдЫрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдиреНрдп рднреМрддрд┐рдХ рдЧреБрдг, рдЬреИрд╕реЗ рддрд╛рд▓рд┐рдХрд╛ред рдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдкреЙрдкреНрдпреБрд▓реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреНрд░рд╢реНрдиреЛрдВ рдореЗрдВ рд▓рд┐рдВрдХ рднреМрддрд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред

рдиреНрдпреВрдирддрдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓рд╛рдЧреВ рдХреА рдЧрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреА рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдбреЗрдЯрд╛ рдХреЗрд╡рд▓ "рдСрди рдбрд┐рдорд╛рдВрдб" рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде MATERIALIZED VIEW рдФрд░ REFRESH MATERIALIZED VIEWред рдпрд╣ рдЙрдореНрдореАрдж рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдХреЗ рд░рд┐рд▓реАрдЬ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЕрдкрдбреЗрдЯ рд╕рдордп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ "рддрд╛рдЬрд╝рд╛" рдбреЗрдЯрд╛ рдХреА рдмрд╣реБрдд рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреА рд╕реНрдкрд╖реНрдЯ рдкрд░рд┐рднрд╛рд╖рд╛ рджреА рдЬрд╛рдПрдЧреАред рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреНрд╡реЗрд░реАрдЬрд╝ рд╕реНрд╡рдпрдВ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдмрдЬрд╛рдп рднреМрддрд┐рдХ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░рд▓реЗрдЦрди рдХрд╛рд░реНрдп рд░реЙрдмрд░реНрдЯ рд╣рд╛рд╕ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВ: рдиреЛрд╣рд╛ рдорд┐рд╢, рдереЙрдо рдмреНрд░рд╛рдЙрди, рд░реЙрдмрд░реНрдЯ рд╣рд╛рд╕, рдорд╛рд░реНрдХреЛ рдЯрд╛рдпрдХрд╛рдЬрд╛ред рдХрд╛рдИрдЧрдИ рдХреЛрд╣реЗрдИ рд╕реЗ sepgsql рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕ рдкрд░ рдирд┐рд░реНрдгрдп рд╕рд╣рд┐рдд рдПрдХ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдореАрдХреНрд╖рд╛ред
рднреМрддрд┐рдХрд╡рд╛рджреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреНрдпрд╛ рд╣реИ? рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдПрдХ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддреА рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдПрдХ рдирд┐рдпрдорд┐рдд рджреГрд╢реНрдп рд╣реИред рдПрдХ рджреГрд╢реНрдп рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд░рд┐рд╢реНрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдкреНрд░рдХреНрд╖реЗрдкрдг рд╣реИ рдЬрд┐рд╕рдореЗрдВ рднрдВрдбрд╛рд░рдг рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдЯреЗрдмрд▓ рд╣реИ ... рдПрдХ рдЯреЗрдмрд▓!

рдПрдХ рднреМрддрд┐рдХрд╡рд╛рджреА рджреГрд╢реНрдп рдХрд╣реАрдВ рдмреАрдЪ рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИ - рдпрд╣ рд╕рд╛рд░рдгреАрдмрджреНрдз рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдкреНрд░рдХреНрд╖реЗрдкрдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрдкрдирд╛ рднрдВрдбрд╛рд░рдг рд╣реИред рдпрд╣ рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдХреЛ рджреГрд╢реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╡реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рднреМрддрд┐рдХреАрдХреГрдд рджреГрд╢реНрдп рдХреЛ рдЗрд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдЪрд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдХреНрд╡реЗрд░реА рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рддрд╛рдЬрд╛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЕрджреНрдпрддрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЫреЛрдЯрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдХреИрдирд┐рдВрдЧ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЪреВрдВрдХрд┐ рднреМрддрд┐рдХ рд░реВрдк рд╕реЗ рджреЗрдЦрдиреЗ рдХрд╛ рдЕрдкрдирд╛ рдкреВрд░реНрдг рднрдВрдбрд╛рд░рдг рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЯреЗрдмрд▓ рд╕реНрдкреЗрд╕ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕реЗ рдЕрдирд▓реЙрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ( рд▓рдЧрднрдЧред рдЕрдиреБрд╡рд╛рдж ред: рдЕрд░реНрдерд╛рддреН, рдбреЗрдЯрд╛ рд░рд╛рдЗрдЯ- рдлреЙрд░рд╡рд░реНрдб рд▓реЙрдЧ рдХреЛ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ)ред

рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд╕рд╛рде, 4 рдирдП рдПрд╕рдХреНрдпреВрдПрд▓ рдХрдорд╛рдВрдб рдкреЗрд╢ рдХрд┐рдП рдЧрдП рд╣реИрдВ:

тАв рдмрдирд╛рдП рдЧрдП рджреГрд╢реНрдп рджреЗрдЦреЗрдВ
тАв рд╕рдВрд╢реЛрдзрд┐рдд рд╕рд╛рдордЧреНрд░реА рджреЗрдЦреЗрдВ
тАв рдбреНрд░рд╛рдк рдореИрдЯреЗрд░рд┐рдпрд▓рд╛рдЗрдЬреНрдб рд╡реНрдпреВ
тАв рд╕рдВрд╢реЛрдзрд┐рдд рд╕рд╛рдордЧреНрд░реА рджреЗрдЦреЗрдВ

рдХреНрд░рд┐рдПрдЯ, рдЕрд▓рд░реНрдЯ рдФрд░ рдбреНрд░реЙрдк - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЗ рджреГрд╢реНрдп рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп DDL рдХрдорд╛рдВрдб рд╣реИрдВред рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЯреАрдо REFRESH рд╣реИ (рдЗрд╕рдХреЗ рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдореБрджрд╛рдп рдХреЗ рднреАрддрд░ рд▓рдВрдмреЗ рд╡рд┐рд╡рд╛рдж рдереЗ)ред рдЗрд╕ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдХреИрди рдХрд┐рдП рдЧрдП рдЕрдиреБрд░реЛрдз рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдХреЗ рддрд╛рдЬреЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рднреМрддрд┐рдХ рджреГрд╢реНрдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрд░рдИрдПрдлрдЖрд░рдИрдПрд╕рдПрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреНрд░рдВрдХрдЯ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирд╣реАрдВ, рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рд╕реЗред

рднреМрддрд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд░реВрдкрдг рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВ: рдбреЗрдЯрд╛ рдХреА рддреНрд╡рд░рд┐рдд рдкрд╣реБрдВрдЪ рдЬреЛ рдХрд┐ рджреВрд░рд╕реНрде рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП (рд╕рдордп-рд╕рдордп рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ (рдХреИрд╢рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо), ORDER рджреНрд╡рд╛рд░рд╛ рдбреЗрдЯрд╛ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреЛрд╕реНрдЯрдЧреНрд░реИрдЬ рд╕рд░реНрд╡рд░ рдкрд░ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрдврд╝рдирд╛)ред рдмрдбрд╝реА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ, рд╕рдордп-рд╕рдордп рдкрд░ рдорд╣рдВрдЧреА "рдкреГрд╖реНрдарднреВрдорд┐" рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди, рдЖрджрд┐ред

рдореИрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рд╢реНрд░рдорд┐рдХреЛрдВ рдХреЗ рдХреБрдЫ рдЕрджреНрднреБрдд рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдХрд┐рд╕рдиреЗ рдХрднреА рдХрд╣рд╛ рдХрд┐ рднреМрддрд┐рдХ рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЕрджреНрдпрддрди рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ?

рдЕрдм, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

postgres = # CREATE TABLE aa AS SELECT generate_series (1,1000000) AS рдХреЗ рд░реВрдк рдореЗрдВ;
1000000 рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ = # рдХреНрд░рд┐рдПрдЯ рд╡реНрдпреВ рдРрд╡ рд╕рд┐рд▓реЗрдХреНрдЯ * рд╕реЗ рдЖ </ strong> рдП <= 500000;
рджреЗрдЦреЗрдВ
postgres = # CREATE MATERIALIZED VIEW aam as SELECT * рд╕реЗ рдЖ <рд╣ <рдЬрд╣рд╛рдВ 500000;
500000 рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ

рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рд╢реНрддреЗ рдХреЗ рд▓рд┐рдП рдЖрдпрд╛рдо:

postgres = # SELECT pg_relation_size ('aa') AS tab_size, pg_relation_size ('aav') AS view_size, pg_relation_size ('aam') AS matview_size;
tab_size | view_size | matview_size
---------- + ----------- + --------------
36249600 | 0 | 18137088
( 1 рдкрдВрдХреНрддрд┐ )

рдПрдХ рднреМрддрд┐рдХ рджреГрд╢реНрдп рджреГрд╢реНрдп рдмрдирд╛рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдореВрд▓ рддрд╛рд▓рд┐рдХрд╛ (36 рдПрдордмреА рдЖрдХрд╛рд░) рд╕реЗ рдЪрдпрдирд┐рдд рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣рдж рддрдХ рднрдВрдбрд╛рд░рдг (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, 18 рдПрдордмреА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдореА рджреГрд╢реНрдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

postgres = # DELETE FROM aa рд╕реЗ <a = 500000;
DELETE 500000
postgres = # SELECT count (*) FROM aam;
рдЧрд┐рдирддреА
- 500,000
( 1 рдкрдВрдХреНрддрд┐ )
postgres = # REFRESH MATERIALIZED VIEW aam;
рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рд╛рдордЧреНрд░реА рджреЗрдЦреЗрдВ
postgres = # SELECT count (*) FROM aam;
рдЧрд┐рдирддреА
- 0
( 1 рдкрдВрдХреНрддрд┐ )

рдЖрд░рдИрдПрдлрдЖрд░рдИрдПрд╕рдПрдЪ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдиреЗ рднреМрддрд┐рдХрд╡рд╛рджреА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рд▓реЗрдЦрди рдХреЗ рд╕рдордп, REFRESH рдПрдХ рдЕрдирдиреНрдп рд▓реЙрдХ (eh ...) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред
REFRESH рдХрдорд╛рдВрдб рдХреЗ NO DATA рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рднреМрддрд┐рдХ рджреГрд╢реНрдп рдХреЛ рдПрдХ рдЕрдпреЛрдЧреНрдп рдЕрд╡рд╕реНрдерд╛ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

postgres = # REFRESH MATERIALIZED VIEW aam with NO DATA;
рдкреБрдирд░реНрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕рд╛рдордЧреНрд░реА рджреЗрдЦреЗрдВ
postgres = # SELECT count (*) FROM aam;
рддреНрд░реБрдЯрд┐: рднреМрддрд┐рдХрд╡рд╛рджреА рджреГрд╢реНрдп "рдПрдПрдПрдо" рдЖрдмрд╛рдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
HINT: REFRESH MATERIALIZED VIEW рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдПрдХ рдирдпрд╛ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рддрд╛рд▓рд┐рдХрд╛ рд╕рд╛рдордиреЗ рдЖрдИ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рднреМрддрд┐рдХ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реИред

postgres = # SELECT matviewname, isscannable FROM pg_matviews;
matviewname | isscannable
------------- + -------------
рдЖрдо | рдЪ
( 1 рдкрдВрдХреНрддрд┐ )

рдбреАрдПрдордПрд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рдПрдХ рднреМрддрд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рджреГрд╢реНрдп рдбреЗрдЯрд╛ рдореВрд▓ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛ рд╕рдХрддрд╛ рд╣реИред рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╡рд┐рдЪрд╛рд░, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рдХреНрд╡реЗрд░реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП, рдЙрдирдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ ( рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╡рд┐рдЪрд╛рд░реЛрдВ ) рдХрд╛ рд╕рдВрд╢реЛрдзрди рд╕рдВрднрд╡ рд╣реИред

postgres = # INSERT INT aam VALUES (1);
рддреНрд░реБрдЯрд┐: рднреМрддрд┐рдХрд╡рд╛рджреА рджреГрд╢реНрдп рдХреЛ "aam" рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ
Postgres = # UPDATE aam SET a = 5;
рддреНрд░реБрдЯрд┐: рднреМрддрд┐рдХрд╡рд╛рджреА рджреГрд╢реНрдп рдХреЛ "aam" рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ
postgres = # DELETE FROM aam;
рддреНрд░реБрдЯрд┐: рднреМрддрд┐рдХрд╡рд╛рджреА рджреГрд╢реНрдп рдХреЛ "aam" рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддреЗ

рдЕрдм рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕реБрдзрд╛рд░ рдФрд░ рдмрд┐рдЧрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж рдЬреЛ рдЖрдк рднреМрддрд┐рдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдЖрдк рдЙрдирдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЛ рднреА рд╣реЗрд░рдлреЗрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдореВрд▓ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдХреАрдорд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд╛ рдХрд┐рдП рдмрд┐рдирд╛ рднреМрддрд┐рдХ рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рдХреНрд╡реЗрд░реА рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрд╣реБрдд рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реБрдзрд╛рд░ рд╕рдХрддреЗ рд╣реИрдВ:

postgres = # EXALAIN ANALYZE рд╕реЗрд▓реЗрдХреНрдЯ * рд╕реЗ aam WHERE a = 1;
рдЬрд▓реНрджреА рдпреЛрдЬрдирд╛
-------------------------------------------------- ------------------------------------------------
рд╢рд╛рдо рдХреЛ рд╕реНрдХреИрди рд╕реНрдХреИрди ( рд▓рд╛рдЧрдд = 0.00..8464.00 рдкрдВрдХреНрддрд┐рдпрд╛рдБ = 1 рдЪреМрдбрд╝рд╛рдИ = 4 ) ( рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп = 0.060..155.934 рдкрдВрдХреНрддрд┐рдпрд╛рдБ = 1 рдЫреЛрд░ = 1 )
рдлрд╝рд┐рд▓реНрдЯрд░: ( a = 1 )
рдлрд╝рд┐рд▓реНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдХрд╛рд▓реА рдЧрдИ рдкрдВрдХреНрддрд┐рдпрд╛рдБ: 499999
рдХреБрд▓ рд░рдирдЯрд╛рдЗрдо: 156.047 рдПрдордПрд╕
( 4 рдкрдВрдХреНрддрд┐рдпрд╛рдБ )
postgres = # CREATE INDEX aam_ind ON aam (a);
рдкреИрджрд╛ рдХрд░рдирд╛
postgres = # EXALAIN ANALYZE рд╕реЗрд▓реЗрдХреНрдЯ * рд╕реЗ aam WHERE a = 1;
рдЬрд▓реНрджреА рдпреЛрдЬрдирд╛
-------------------------------------------------- -------------------------------------------------- --------------
рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗрд╡рд▓ aam_ind рдкрд░ aam_ind рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХреИрди рдХрд░реЗрдВ ( рд▓рд╛рдЧрдд = 0.42..8.44 рдкрдВрдХреНрддрд┐рдпрд╛рдБ = 1 рдЪреМрдбрд╝рд╛рдИ = 4 ) ( рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп = 2.096..2.101 рдкрдВрдХреНрддрд┐рдпрд╛рдБ = 1 рдЫреЛрд░ = 1 )
рд╕реВрдЪрдХрд╛рдВрдХ рдХрдВрдбреЛрдо: ( рдП = 1 )
рдвреЗрд░ рдмреБрдд: рез
рдХреБрд▓ рд░рдирдЯрд╛рдЗрдо: 2.196 рдПрдордПрд╕
( 4 рдкрдВрдХреНрддрд┐рдпрд╛рдБ )

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдФрд░ рдмрд╛рдзрд╛рдПрдВ (рднреМрддрд┐рдХ рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рдмрд╛рдзрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ!) рдХреЛ рднреМрддрд┐рдХ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреА рдирдХрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рддреНрд╡рд░рд┐рдд рдХреНрд╡реЗрд░реА рдЬреЛ рддрд╛рд▓рд┐рдХрд╛ рдХреА рдкреНрд░рд╛рдердорд┐рдХ рдХреБрдВрдЬреА рдХреЛ рд╕реНрдХреИрди рдХрд░рддреА рд╣реИ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рднреМрддрд┐рдХ рджреГрд╢реНрдп рдкрд░ рдШрд╛рддрдХ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдЬрд╛рдирд╡рд░ рдмрд▓ рдЪрд▓рд╛ рд╕рдХрддреА рд╣реИред

postgres = # INSERT INTO bb VALUES (рдЬреЗрдирд░реЗрдЯ_рд╕рд░реАрдЬ (1,100000));
INSERT 0 100000
postgres = # EXALAIN ANALYZE рд╕реЗрд▓реЗрдХреНрдЯ рдХрд░реЗрдВ * FROM bb WHERE a = 1;
рдЬрд▓реНрджреА рдпреЛрдЬрдирд╛
-------------------------------------------------- -------------------------------------------------- -------------
рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗрд╡рд▓ bb_pkey рдкрд░ bb ( рд▓рд╛рдЧрдд = 0.29..8.31 рдкрдВрдХреНрддрд┐рдпреЛрдВ = 1 рдЪреМрдбрд╝рд╛рдИ = 4 ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХреИрди рдХрд░реЗрдВ ( рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп = 0.078..0.080 рдкрдВрдХреНрддрд┐рдпреЛрдВ = 1 рдЫреЛрд░реЛрдВ = 1 )
рд╕реВрдЪрдХрд╛рдВрдХ рдХрдВрдбреЛрдо: ( рдП = 1 )
рдвреЗрд░ рдмреБрдд: рез
рдХреБрд▓ рд░рдирдЯрд╛рдЗрдо: 0.159 рдПрдордПрд╕
( 4 рдкрдВрдХреНрддрд┐рдпрд╛рдБ )
postgres = # CREATE MATERIALIZED VIEW bbm as SELECT * FROM bb;
100000 рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
postgres = # EXPLAIN ANALYZE рд╕реЗрд▓реЗрдХреНрдЯ рдХрд░реЗрдВ * FROM bbm рд╕реЗ = a = 1;
рдЬрд▓реНрджреА рдпреЛрдЬрдирд╛
-------------------------------------------------- -------------------------------------------------
Bbm рдкрд░ Seq рд╕реНрдХреИрди ( рд▓рд╛рдЧрдд = 0.00..1776.00 рдкрдВрдХреНрддрд┐рдпрд╛рдБ = 533 рдЪреМрдбрд╝рд╛рдИ = 4 ) ( рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп = 0.144..41.873 рдкрдВрдХреНрддрд┐рдпрд╛рдБ = 1 рдЫреЛрд░ = 1 )
рдлрд╝рд┐рд▓реНрдЯрд░: ( a = 1 )
рдлрд╝рд┐рд▓реНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдХрд╛рд▓реА рдЧрдИ рдкрдВрдХреНрддрд┐рдпрд╛рдБ: 99999
рдХреБрд▓ рд░рдирдЯрд╛рдЗрдо: 41.935 рдПрдордПрд╕
( 4 рдкрдВрдХреНрддрд┐рдпрд╛рдБ )

рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рд░реЛрдзреА рдкреИрдЯрд░реНрди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдФрджреНрдпреЛрдЧрд┐рдХ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИрдВ!
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рднреМрддрд┐рдХрд╡рд╛рджреА рд╡рд┐рдЪрд╛рд░ рдПрдХ рдорд╣рд╛рди рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдХреИрд╢рд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ!

Source: https://habr.com/ru/post/In188802/


All Articles