SQL рд╕рд░реНрд╡рд░ рдореЗрдВ рд╡рд┐рднрд╛рдЬрди

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

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

рдореБрдЦреНрдп рд▓рд╛рдн рднреА рд╡рд╣рд╛рдБ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ:

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

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

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

рд╢реЗрд╖ рд▓рд╛рднреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (рддреБрд░рдВрдд рд╡рд░реНрдЧреЛрдВ рдХреЛ рдмрдврд╝рд╛рдПрдВ; рдЙрддреНрдкрд╛рджрдХрддрд╛ рдмрдврд╝рд╛рдПрдВ) - рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдкрд╛рдардХ рдХреЛ рдХрд╛рдлреА рд╢рд░реНрдорд┐рдВрджрд╛ рдХрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдЕрдм рдореИрдВ рдЕрднреНрдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддрд╛ рд╣реВрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, 4 рдлрд╝рд╛рдЗрд▓ рд╕рдореВрд╣реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдПрдБ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:

create database [PartitionTest] on primary (name ='PTestPrimary', filename = 'E:\data\partitionTestPrimary.mdf', size = 8092KB, filegrowth = 1024KB) , filegroup [fg1] (name ='PTestFG1', filename = 'E:\data\partitionTestFG1.ndf', size = 8092KB, filegrowth = 1024KB) , filegroup [fg2] (name ='PTestFG2', filename = 'E:\data\partitionTestFG2.ndf', size = 8092KB, filegrowth = 1024KB) , filegroup [fg3] (name ='PTestFG3', filename = 'E:\data\partitionTestFG3.ndf', size = 8092KB, filegrowth = 1024KB) log on (name = 'PTest_Log', filename = 'E:\data\partitionTest_log.ldf', size = 2048KB, filegrowth = 1024KB); go alter database [PartitionTest] set recovery simple; go use partitionTest; 

рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВ рдЬрд┐рд╕реЗ рд╣рдо рдкреАрдбрд╝рд╛ рджреЗрдВрдЧреЗред

 create table ptest (id int identity(1,1), dt datetime, dummy_int int, dummy_char char(6000)); 

рдФрд░ рдЗрд╕реЗ рдПрдХ рд╡рд░реНрд╖ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рднрд░реЗрдВ:
 ;with nums as ( select 0 n union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9 ) insert into ptest(dt, dummy_int, dummy_char) select dateadd(hh, rn-1, '20180101') dt, rn dummy_int, 'dummy char column #' + cast(rn as varchar) from ( select row_number() over(order by (select (null))) rn from nums n1, nums n2, nums n3, nums n4 )t where rn < 8761 

рдЕрдм pTest рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ 2018 рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдШрдВрдЯреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╣реИред

рдЕрдм рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рднрд╛рдЬрди рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдХреЛ рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдорд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред SQL рд╕рд░реНрд╡рд░ рдХреЗрд╡рд▓ рд╢реНрд░реЗрдгреА рд╡рд┐рднрд╛рдЬрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рд╣рдо рдЕрдкрдиреА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ dt (рдбреЗрдЯрд╛рдЯрд╛рдЗрдо) рдХреЙрд▓рдо рджреНрд╡рд╛рд░рд╛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ 4 рдорд╣реАрдиреЗ рдХрд╛ рдбреЗрдЯрд╛ рд╣реЛ (рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рдЦрд░рд╛рдм рдХрд░ рджрд┐рдпрд╛ рд╣реИ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдкрд╣рд▓реЗ рдЦрдВрдб рдореЗрдВ 3 рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╣реЛрдЧрд╛, 4 рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛, 5 рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП рддреАрд╕рд░рд╛, рд▓реЗрдХрд┐рди рдкреНрд░рджрд░реНрд╢рди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП - рдпрд╣ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ)

 create partition function pfTest (datetime) as range for values ('20180401', '20180801') 

рд╕рдм рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдПрдХ "рдЧрд▓рддреА" рдХреА рд╣реИред рдпрджрд┐ рдЖрдк msdn рдореЗрдВ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рдЖрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реАрдорд╛ рдХрд┐рд╕ рдЦрдВрдб рд╕реЗ - рдмрд╛рдИрдВ рдУрд░ рдпрд╛ рджрд╛рдИрдВ рдУрд░ рд╣реЛрдЧреАред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХрд┐рд╕реА рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░рдг рд╕реЗ, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдмреЙрд░реНрдбрд░ "рд▓реЗрдлреНрдЯ" рдЕрдиреБрднрд╛рдЧ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд┐рднрд╛рдЬрди рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧрд╛:

 create partition function pfTest (datetime) as range right for values ('20180401', '20180801') 

рдЬрдмрдХрд┐ рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

 create partition function pfTest (datetime) as range left for values ('20180401', '20180801') 

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

рд╡рд┐рднрд╛рдЬрди рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рднрд╛рдЬрди рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдлрд╛рдЗрд▓рдЧреНрд░реБрдк рдХреЗ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдмрд╛рдВрдзрддрд╛ рд╣реИ:

 create partition scheme psTest as partition pfTest to ([FG1], [FG2], [FG3]) 

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

 create clustered index cix_pTest_id on pTest(id) on psTest(dt) 

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

рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рд╛ ( рдЕрдиреБрд░реЛрдз рдпрд╣рд╛рдВ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ):

 SELECT sc.name + N'.' + so.name as [Schema.Table], si.index_id as [Index ID], si.type_desc as [Structure], si.name as [Index], stat.row_count AS [Rows], stat.in_row_reserved_page_count * 8./1024./1024. as [In-Row GB], stat.lob_reserved_page_count * 8./1024./1024. as [LOB GB], p.partition_number AS [Partition #], pf.name as [Partition Function], CASE pf.boundary_value_on_right WHEN 1 then 'Right / Lower' ELSE 'Left / Upper' END as [Boundary Type], prv.value as [Boundary Point], fg.name as [Filegroup] FROM sys.partition_functions AS pf JOIN sys.partition_schemes as ps on ps.function_id=pf.function_id JOIN sys.indexes as si on si.data_space_id=ps.data_space_id JOIN sys.objects as so on si.object_id = so.object_id JOIN sys.schemas as sc on so.schema_id = sc.schema_id JOIN sys.partitions as p on si.object_id=p.object_id and si.index_id=p.index_id LEFT JOIN sys.partition_range_values as prv on prv.function_id=pf.function_id and p.partition_number= CASE pf.boundary_value_on_right WHEN 1 THEN prv.boundary_id + 1 ELSE prv.boundary_id END /* For left-based functions, partition_number = boundary_id, for right-based functions we need to add 1 */ JOIN sys.dm_db_partition_stats as stat on stat.object_id=p.object_id and stat.index_id=p.index_id and stat.index_id=p.index_id and stat.partition_id=p.partition_id and stat.partition_number=p.partition_number JOIN sys.allocation_units as au on au.container_id = p.hobt_id and au.type_desc ='IN_ROW_DATA' /* Avoiding double rows for columnstore indexes. */ /* We can pick up LOB page count from partition_stats */ JOIN sys.filegroups as fg on fg.data_space_id = au.data_space_id ORDER BY [Schema.Table], [Index ID], [Partition Function], [Partition #]; 



рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдореЗрдВ рддреАрди рдирд╣реАрдВ рдмрд╣реБрдд рд╕рдлрд▓ рдЕрдиреБрднрд╛рдЧ рдорд┐рд▓реЗ - рдкрд╣рд▓рд╛ рднрдВрдбрд╛рд░ рд╕рдордп рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ 04/01/2018 00:00:00 рд╕рдорд╛рд╡реЗрд╢реА, рджреВрд╕рд░рд╛ - 01/01/2018 рд╕реЗ 00:00:01 рд╕реЗ 08/01/2018 00:00:00 рд╕рдорд╛рд╡реЗрд╢реА, рддрдХ рддреАрд╕рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рдЕрдВрдд рддрдХ 08/01/2018 00:00:01 рд╕реЗ (рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рджреВрд╕рд░реЗ рдХреЗ рдЕрдВрд╢ рдХреЛ рдпрд╛рдж рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдпрд╛рдж рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрд╕рдХреНрдпреВрдПрд▓ рд╕рд░реНрд╡рд░ рдЗрди рдЕрдВрд╢реЛрдВ рдХреЛ рдХреНрдпрд╛ рд▓рд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрд░реНрде рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ)ред
рдЕрдм рдПрдХ рд╣реА рд╡рд┐рднрд╛рдЬрди рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдбрдореА_рдЗрдВрдЯ рдлрд╝реАрд▓реНрдб рдкрд░ рдПрдХ рдЧреИрд░-рд╕рдВрдХреБрд▓ рд╕реВрдЪрдХрд╛рдВрдХ рдмрдирд╛рдПрдВ, "рдЧрдардмрдВрдзрди"ред

рд╣рдореЗрдВ рдПрдХ рд╕рдВрд░реЗрдЦрд┐рдд рд╕реВрдЪрдХрд╛рдВрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?
рд╣рдореЗрдВ рдПрдХ рд╕рдВрд░реЗрдЦрд┐рдд рд╕реВрдЪрдХрд╛рдВрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдПрдХ рдЦрдВрдб (рд╕реНрд╡рд┐рдЪ) рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХреЗрдВ - рдФрд░ рдпрд╣ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП, рдЕрдХреНрд╕рд░, рд╡реЗ рд╡рд┐рднрд╛рдЬрди рд╕реЗ рдкрд░реЗрд╢рд╛рди рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХрдо-рд╕реЗ-рдХрдо рдПрдХ рдЕрдирд▓рд┐рдВрдХрдб рдЗрдВрдбреЗрдХреНрд╕ рд╣реИ, рддреЛ рдЖрдк рдЕрдиреБрднрд╛рдЧ рдХреЛ рд╕реНрд╡рд┐рдЪ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ

 create nonclustered index nix_pTest_dummyINT on pTest(dummy_int) on psTest(dt); 

рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВрдиреЗ рдпрд╣ рдХреНрдпреЛрдВ рдХрд╣рд╛ рдХрд┐ рд╕реЗрдХреНрд╢рди рдХреЗ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЗ рдкреНрд░рд╢реНрди рдзреАрдореЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдиреБрд░реЛрдз рдЪрд▓рд╛рдПрдБ:

 SET STATISTICS TIME, IO ON; select id from pTest where dummy_int = 54 SET STATISTICS TIME, IO OFF; 

рдФрд░ рдЪрд▓реЛ рдирд┐рд╖реНрдкрд╛рджрди рдЖрдБрдХрдбрд╝реЗ рджреЗрдЦреЗрдВ:

 Table 'ptest'. Scan count 3, logical reads 6, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 

рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпреЛрдЬрдирд╛:



рдЪреВрдБрдХрд┐ рд╣рдорд╛рд░рд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╡рд░реНрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ "рд╕рдВрд░реЗрдЦрд┐рдд" рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ, рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдЕрдкрдирд╛ рд╕реВрдЪрдХрд╛рдВрдХ рд╣реИ, рдЬреЛ рдЕрдиреНрдп рд╡рд░реНрдЧреЛрдВ рдкрд░ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХреЗ рд╕рд╛рде "рдЕрд╕рдВрдмрджреНрдз" рд╣реИред рд╣рдордиреЗ рдЙрд╕ рдХреНрд╖реЗрддреНрд░ рдкрд░ рд╢рд░реНрддреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рд╡рд┐рднрд╛рдЬрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП SQL рд╕рд░реНрд╡рд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ рддрд▓рд╛рд╢ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реЛрддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдХреЗ рдмрдЬрд╛рдп 3 рд╕реВрдЪрдХрд╛рдВрдХ рдХреА рддрд▓рд╛рд╢ рд╣реИред

рдЖрдЗрдП рдПрдХ рд╕реЗрдХреНрд╢рди рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:

 SET STATISTICS TIME, IO ON; select id from pTest where dummy_int = 54 and dt < '20180801' SET STATISTICS TIME, IO OFF; 

рдФрд░ рдЪрд▓реЛ рдирд┐рд╖реНрдкрд╛рджрди рдЖрдБрдХрдбрд╝реЗ рджреЗрдЦреЗрдВ:

 Table 'ptest'. Scan count 2, logical reads 4, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 

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

рд╣рдореЗрдВ рдЕрдм рдЧреИрд░-рд╕рдВрдХреБрд▓ рд╕реВрдЪрдХрд╛рдВрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реВрдВ

 drop index nix_pTest_dummyINT on pTest; 

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

рдЕрдм рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рджреГрд╢реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рд╣рдо рд╣рд░ 4 рдорд╣реАрдиреЗ рдореЗрдВ рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ - рд╣рдо рдкреБрд░рд╛рдиреЗ рдбреЗрдЯрд╛ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдЧрд▓реЗ рдЪрд╛рд░ рдорд╣реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрдВрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ ("рд╕реНрд▓рд╛рдЗрдбрд┐рдВрдЧ рд╡рд┐рдВрдбреЛ" рдХрд╛ рд╕рдВрдЧрдарди рдПрдордПрд╕рдбреАрдПрди рдФрд░ рдмреНрд▓реЙрдЧреНрд╕ рдХреЗ рдвреЗрд░ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ)ред

рд╣рдо рдХрд╛рд░реНрдп рдХреЛ рдЫреЛрдЯреЗ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдЙрдк-рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

  1. 01/01/2019 рд╕реЗ 04/01/2019 рддрдХ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрднрд╛рдЧ рдЬреЛрдбрд╝реЗрдВ
  2. рдПрдХ рдЦрд╛рд▓реА рдордВрдЪ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдБ
  3. рдордВрдЪ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ 04/01/2018 рддрдХ рдбреЗрдЯрд╛ рдЕрдиреБрднрд╛рдЧ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ
  4. рдЦрд╛рд▓реА рдЦрдВрдб рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВ

рдЖрдЗрдП рдЬрд╛рдиреЗ:

1. рд╣рдо рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдирдпрд╛ рдЦрдВрдб FG1 рдлрд╛рдЗрд▓рдЧреНрд░реБрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЬрд▓реНрдж рд╣реА рд╣рдорд╕реЗ рдореБрдХреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛:

 alter partition scheme psTest next used [FG1]; 

рдФрд░ рдПрдХ рдирдИ рд╕реАрдорд╛ рдЬреЛрдбрд╝рдХрд░ рд╡рд┐рднрд╛рдЬрди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмрджрд▓реЗрдВ:

 SET STATISTICS TIME, IO ON; alter partition function pfTest() split range ('20190101'); SET STATISTICS TIME, IO OFF; 

рд╣рдо рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ:

 Table 'ptest'. Scan count 1, logical reads 76171, physical reads 0, read-ahead reads 753, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. Table 'Worktable'. Scan count 1, logical reads 7440, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 

рддрд╛рд▓рд┐рдХрд╛ (рдХреНрд▓рд╕реНрдЯрд░ рдЗрдВрдбреЗрдХреНрд╕) рдореЗрдВ 8809 рдкреГрд╖реНрда рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рд░реАрдбрд┐рдВрдЧ рдХреА рд╕рдВрдЦреНрдпрд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЕрдЪреНрдЫреЗ рдФрд░ рдмреБрд░реЗ рд╕реЗ рдкрд░реЗ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдХреНрдпрд╛ рд╣реИред



рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рдЕрдкреЗрдХреНрд╖рд┐рдд рдерд╛ - рдКрдкрд░реА рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдЦрдВрдб рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ (рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕реАрдорд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдмрд╛рдПрдВ рдЦрдВрдб рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ) 01/01/2019 рдФрд░ рдПрдХ рдЦрд╛рд▓реА рдЕрдиреБрднрд╛рдЧ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд▓рдВрдмреА рддрд╛рд░реАрдЦ рдХреЗ рд╕рд╛рде рдЕрдиреНрдп рдбреЗрдЯрд╛ рд╣реЛрдЧрд╛ред

рд╕рдм рдХреБрдЫ рдареАрдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд░реАрдбрд┐рдВрдЧ рдХреНрдпреЛрдВ рд╣реИрдВ? рд╣рдо рдКрдкрд░ рджрд┐рдП рдЧрдП рдЖрдВрдХрдбрд╝реЗ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ FG3 рдореЗрдВ рдореМрдЬреВрдж рддреАрд╕рд░реЗ рдЦрдВрдб рдХрд╛ рдбреЗрдЯрд╛ FG1 рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд▓рд╛ рдЦрдВрдб, FG3 рдореЗрдВ рдЦрд╛рд▓реА рд╣реИред

2. рдПрдХ рд╕реНрдЯреЗрдЬ рдЯреЗрдмрд▓ рдмрдирд╛рдПрдВред

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

 create table stageTest (id int identity(1,1), dt datetime, dummy_int int, dummy_char char(6000)) ; create clustered index cix_stageTest_id on stageTest(id) on [FG1]; 

рдЖрдкрдХреЛ рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

3. рдЕрдм рд╣рдо рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ:

 SET STATISTICS TIME, IO ON; alter table pTest switch partition 1 to stageTest SET STATISTICS TIME, IO OFF; 

рдФрд░ рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдорд┐рд▓рддрд╛ рд╣реИ:

  4947,  16,  1,  59 ALTER TABLE SWITCH statement failed. There is no identical index in source table 'PartitionTest.dbo.pTest' for the index 'cix_stageTest_id' in target table 'PartitionTest.dbo.stageTest' . 

рдордЬреЗрджрд╛рд░, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╣реИ:

 select o.name tblName, i.name indexName, c.name columnName, ic.is_included_column from sys.indexes i join sys.objects o on i.object_id = o.object_id join sys.index_columns ic on ic.object_id = i.object_id and ic.index_id = i.index_id join sys.columns c on ic.column_id = c.column_id and o.object_id = c.object_id where o.name in ('pTest', 'stageTest') 



рдпрд╛рдж рд░рдЦреЗрдВ, рдореИрдВрдиреЗ рд▓рд┐рдЦрд╛ рдерд╛ рдХрд┐ рдПрдХ рд╡рд┐рднрд╛рдЬрди рддрд╛рд▓рд┐рдХрд╛ рдкрд░ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдХреНрд▓рд╕реНрдЯрд░ рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛? рдпрд╣ рдареАрдХ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрдпреЛрдВ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рдХреНрд▓рд╕реНрдЯрд░ рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рддреЗ рд╕рдордп, SQL рд╕рд░реНрд╡рд░ рдХреЛ рдЙрд╕ рдХреЙрд▓рдо рд╕рд╣рд┐рдд рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдЬреЛрдбрд╝рд╛ рдФрд░ рдРрд╕рд╛ рдХрд╣рдирд╛ рднреВрд▓ рдЧрдПред рдФрд░ рдореБрдЭреЗ рд╕рдЪ рдореЗрдВ рд╕рдордЭ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рдХреНрдпреЛрдВред
рд▓реЗрдХрд┐рди, рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдорд╕реНрдпрд╛ рд╕рдордЭ рдореЗрдВ рдЖрддреА рд╣реИ, рд╣рдо рд╕реНрдЯреЗрдЬ рдЯреЗрдмрд▓ рдкрд░ рдХреНрд▓рд╕реНрдЯрд░ рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВред

 create clustered index cix_stageTest_id on stageTest(id, dt) with (drop_existing = on) on [FG1]; 

рдФрд░ рдЕрдм, рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рд╣рдо рдЕрдиреБрднрд╛рдЧ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ:

 SET STATISTICS TIME, IO ON; alter table pTest switch partition 1 to stageTest SET STATISTICS TIME, IO OFF; 

рддрд╛ рдбреИрдо! рдЕрдиреБрднрд╛рдЧ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реА рд▓рд╛рдЧрдд рдХреНрдпрд╛ рд╣реИ:

 SQL Server parse and compile time: CPU time = 0 ms, elapsed time = 0 ms. SQL Server Execution Times: CPU time = 0 ms, elapsed time = 0 ms. SQL Server parse and compile time: CPU time = 0 ms, elapsed time = 0 ms. SQL Server Execution Times: CPU time = 0 ms, elapsed time = 0 ms. SQL Server Execution Times: CPU time = 0 ms, elapsed time = 3 ms. 

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

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реИ:



рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдорд╣рд╛рди рд╣реИред рдкрд╣рд▓реЗ рдЦрдВрдб рдореЗрдВ, рд╢реВрдиреНрдп рд░рд┐рдХреЙрд░реНрдб рдмрдЪреЗ рд╣реИрдВ, рд╡реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдЯреЗрдЬрдЯреЗрд╕реНрдЯ рдЯреЗрдмрд▓ рдХреЗ рд▓рд┐рдП рд░рд╡рд╛рдирд╛ рд╣реЛ рдЧрдПред рд╣рдо рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ

4. рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЬреЛ рдХреБрдЫ рднреА рдмрдЪрд╛ рд╣реИ, рд╡рд╣ рд╣реИ рд╣рдорд╛рд░рд╛ рдЦрд╛рд▓реА рдкрд╣рд▓рд╛ рдЦрдВрдб рд╣рдЯрд╛рдирд╛ред рдЖрдЗрдП рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:

 SET STATISTICS TIME, IO ON; alter partition function pfTest() merge range ('20180401'); SET STATISTICS TIME, IO OFF; 

рдФрд░ рдпрд╣ рднреА рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкрд░ рдПрдХ рдСрдкрд░реЗрд╢рди рд╣реИред рд╣рдо рд╡рд░реНрдЧреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ:



рд╣рдорд╛рд░реЗ рдкрд╛рд╕, рдЬреИрд╕рд╛ рдХрд┐ рдХреЗрд╡рд▓ 3 рдЦрдВрдб рдереЗ, рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдЕрдкрдирд╛ рдлрд╝рд╛рдЗрд▓ рд╕рдореВрд╣ рд╣реИред рдорд┐рд╢рди рдкреВрд░рд╛ рд╣реБрдЖред рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╕реБрдзрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рдЦреИрд░, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ "рд╕рд╣реА" рдЦрдВрдбреЛрдВ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реАрдорд╛ рдорд╛рдиреЛрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рддрд╛рдХрд┐ рдЕрдиреБрднрд╛рдЧреЛрдВ рдореЗрдВ 4 рдорд╣реАрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВред рдФрд░ рдореИрдВ рдПрдХ рдирдП рдЦрдВрдб рдХреА рд▓рд╛рдЧрдд рдХреЛ рдХрдо рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рджрд╕ рдЧреБрдирд╛ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдкрдврд╝реЗрдВ - рдмрд╕реНрдЯред

рд╣рдо рдкрд╣рд▓реЗ рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╣рдо рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред рдЖрдЗрдП рдПрдХ рдирдпрд╛ рдЦрдВрдб рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ 01/01/2019 рд╕реЗ 04/01/2019 рддрдХ рдХрд╛ рдбреЗрдЯрд╛ рд╣реЛрдЧрд╛, рдФрд░ рд╕рдордп рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рддрдХ рдирд╣реАрдВ:

 alter partition scheme psTest next used [FG2]; SET STATISTICS TIME, IO ON; alter partition function pfTest() split range ('20190401'); SET STATISTICS TIME, IO OFF; 

рдФрд░ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ:

 SQL Server parse and compile time: CPU time = 0 ms, elapsed time = 0 ms. SQL Server Execution Times: CPU time = 0 ms, elapsed time = 0 ms. SQL Server parse and compile time: CPU time = 0 ms, elapsed time = 0 ms. SQL Server Execution Times: CPU time = 0 ms, elapsed time = 0 ms. 

рд╣рд╛! рддреЛ рдЕрдм рдпрд╣ рдСрдкрд░реЗрд╢рди рдХреЗрд╡рд▓ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкрд░ рд╣реИ? рд╣рд╛рдВ, рдпрджрд┐ рдЖрдк рдПрдХ рдЦрд╛рд▓реА рдЦрдВрдб рдХреЛ "рд╡рд┐рднрд╛рдЬрд┐рдд" рдХрд░рддреЗ рд╣реИрдВ - рдпрд╣ рдХреЗрд╡рд▓ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкрд░ рдПрдХ рдСрдкрд░реЗрд╢рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВ рдЧрд╛рд░рдВрдЯреАрдХреГрдд рджреЛрдиреЛрдВ рдЦрд╛рд▓реА рд╡рд░реНрдЧреЛрдВ рдХреЛ рд░рдЦрдиреЗ рдХрд╛ рд╕рд╣реА рдирд┐рд░реНрдгрдп рд╣реЛрдЧрд╛ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдПрдХ рдирдпрд╛ рдЪрдпрди рдХрд░реЗрдВ - рдЙрдиреНрд╣реЗрдВ рд╡рд╣рд╛рдВ рд╕реЗ "рдХрдЯ" рдХрд░реЗрдВред

рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рд╕реНрдЯреЗрдЬ рдЯреЗрдмрд▓ рд╕реЗ рдкрд╛рд░реНрдЯреАрд╢рди рдЯреЗрдмрд▓ рдкрд░ рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

  1. рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдмрд╛рдИрдВ рдУрд░ рдПрдХ рдирдпрд╛ рдЕрдиреБрднрд╛рдЧ рдмрдирд╛рдПрдВ
  2. рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ

рд╣рдо рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ (рдФрд░ рдЙрд╕ рдЪрд░рдг рдХреЛ рдпрд╛рдж рд░рдЦреЗрдВ FG1 рдореЗрдВ):

 alter partition scheme psTest next used [FG1]; SET STATISTICS TIME, IO ON; alter partition function pfTest() split range ('20180401'); SET STATISTICS TIME, IO OFF; 

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ:

 Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. Table 'ptest'. Scan count 1, logical reads 2939, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 

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

 alter table stageTest add constraint check_dt check (dt <= '20180401') 

рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ:

 SET STATISTICS TIME, IO ON; alter table stageTest switch to pTest partition 1 SET STATISTICS TIME, IO OFF; 

рдЖрдБрдХрдбрд╝реЗ:

  SQL Server Execution Times: CPU time = 15 ms, elapsed time = 39 ms. 

рдлрд┐рд░, рдСрдкрд░реЗрд╢рди рдХреЗрд╡рд▓ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкрд░ рд╣реИред рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реИ:



рдареАрдХ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИред рдФрд░ рдЕрдм рд╣рдо рдлрдВрдХреНрд╢рди рдФрд░ рдкрд╛рд░реНрдЯреАрд╢рди рд╕реНрдХреАрдо рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗ (рдореИрдВрдиреЗ рд╡рд┐рднрд╛рдЬрди рд╕реНрдХреАрдо рдФрд░ рдлрдВрдХреНрд╢рди рдХреЛ рдбрд┐рд▓реАрдЯ рдХрд░ рджрд┐рдпрд╛, рдЯреЗрдмрд▓ рдХреЛ рд░реАрдХреНрд░рд┐рдПрдЯ рдФрд░ рд░рд┐рдлрд┐рд▓ рдХрд┐рдпрд╛ рдФрд░ рдирдИ рдкрд╛рд░реНрдЯреАрд╢рди рд╕реНрдХреАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд▓рд╕реНрдЯрд░ рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рдпрд╛):

 create partition function pfTest (datetime) as range right for values ('20180401', '20180801') 

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреМрди-рдХреМрди рд╕реЗ рд╡рд░реНрдЧ рд╣реИрдВ:



рдЦреИрд░, рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рддреАрди "рддрд╛рд░реНрдХрд┐рдХ" рдЦрдВрдб рд╣реИрдВ - рд╕рдордп рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ 04/01/2018 00:00:00 (рд╕рдорд╛рд╡реЗрд╢реА рдирд╣реАрдВ), 04/01/2018 рд╕реЗ 00:00:00 (рд╕рдорд╛рд╡реЗрд╢реА) рд╕реЗ 08/01/2018 00:00:00 ( рд╕рдорд╛рд╡реЗрд╢реА рдирд╣реАрдВ) рдФрд░ рддреАрд╕рд░рд╛, рд╕рдм рдХреБрдЫ рдЬреЛ 01/01/2018 00:00:00 рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдЙрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред

рдЕрдм рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣ рдХрд░рдиреЗ рдХрд╛ рд╡рд╣реА рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╣рдордиреЗ рдкрд┐рдЫрд▓реЗ рд╡рд┐рднрд╛рдЬрди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдерд╛ред

1. рдПрдХ рдирдпрд╛ рдЦрдВрдб рдЬреЛрдбрд╝реЗрдВ:

 alter partition scheme psTest next used [FG1]; SET STATISTICS TIME, IO ON; alter partition function pfTest() split range ('20190101'); SET STATISTICS TIME, IO OFF; 

рд╣рдо рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ:

 Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. Table 'ptest'. Scan count 1, logical reads 3685, physical reads 0, read-ahead reads 4, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. Table 'Worktable'. Scan count 1, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 

рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдпрдереЛрдЪрд┐рдд - рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдЕрдиреБрднрд╛рдЧ рдкрдврд╝реЗрдВред рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ:



рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдм, рдкреВрд░рд╛ рддреАрд╕рд░рд╛ рдЦрдВрдб FG3 рдореЗрдВ рдЬрдЧрд╣ рдкрд░ рдмрдирд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ FG1 рдореЗрдВ рдПрдХ рдирдпрд╛ рдЦрд╛рд▓реА рдЦрдВрдб рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

2. рд╣рдо рдПрдХ рдордВрдЪ рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдЙрд╕ рдкрд░ рдХреЙрд░реНрд░рдХреНрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ

 create table stageTest (id int identity(1,1), dt datetime, dummy_int int, dummy_char char(6000)) ; create clustered index cix_stageTest_id on stageTest(id, dt) on [FG1]; 

3. рд╕реНрд╡рд┐рдЪ рдЦрдВрдб

 SET STATISTICS TIME, IO ON; alter table pTest switch partition 1 to stageTest SET STATISTICS TIME, IO OFF; 

рдЖрдВрдХрдбрд╝реЗ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдСрдкрд░реЗрд╢рди рд╣реИ:

 SQL Server Execution Times: CPU time = 0 ms, elapsed time = 5 ms. 

рдЕрдм, рд╕рднреА рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рдмрд┐рдирд╛ред

4. рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЕрдиреБрднрд╛рдЧ рдирд┐рдХрд╛рд▓реЗрдВ

 SET STATISTICS TIME, IO ON; alter partition function pfTest() merge range ('20180401'); SET STATISTICS TIME, IO OFF; 

рдФрд░ рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ:

 Table 'ptest'. Scan count 1, logical reads 27057, physical reads 0, read-ahead reads 251, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0. 

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реИ:



рдФрд░ рдпрд╣рд╛рдБ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ: рд╣рдорд╛рд░рд╛ рдЦрдВрдб # 2 fg2 рдлрд╝рд╛рдЗрд▓ рд╕рдореВрд╣ рд╕реЗ fg1 рдлрд╝рд╛рдЗрд▓ рд╕рдореВрд╣ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рд╣реЛ рдЧрдпрд╛ред рдХреНрд▓рд╛рд╕ред рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рд╣рдореЗрд╢рд╛ рдПрдХ рдЦрд╛рд▓реА рдЦрдВрдб рдФрд░ "рдХрднреА рдЦрд╛рд▓реА" рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЕрдиреБрднрд╛рдЧ рдФрд░ рдЙрд╕ рдЦрдВрдб рдХреЗ рдмреАрдЪ рдХреА рд╕реАрдорд╛ рдХреЛ "рдирд╖реНрдЯ" рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рдЬрд┐рд╕реЗ рд╣рдордиреЗ "рддрд╛рд▓рд┐рдХрд╛" рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдерд╛ред

рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ:

  1. рд╡рд┐рднрд╛рдЬрди рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдиреЛрдВ рдкрд░ рднрд░реЛрд╕рд╛ рди рдХрд░реЗрдВ - рдЖрдкрдХреЛ рд╡рд╣ рдирд╣реАрдВ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рдереЗред
  2. рдЦрд╛рд▓реА рдЦрдВрдб рдкрд░ рдмрд╛рдПрдВ рдФрд░ рджрд╛рдПрдВ рд░рдЦреЗрдВ - "рд╕реНрд▓рд╛рдЗрдбрд┐рдВрдЧ рд╡рд┐рдВрдбреЛ" рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░рддреЗ рд╕рдордп рд╡реЗ рдЖрдкрдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдВрдЧреЗред
  3. рдЧреИрд░-рдЦрд╛рд▓реА рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдФрд░ рд╡рд┐рд▓рдп рдХрд░реЗрдВ - рдпрд╣ рд╣рдореЗрд╢рд╛ рджрд░реНрдж рд╣реЛрддрд╛ рд╣реИ, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдЗрд╕рд╕реЗ рдмрдЪреЗрдВред
  4. рдЕрдкрдиреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ - рдпрджрд┐ рд╡реЗ рдЙрд╕ рдХреЙрд▓рдо рджреНрд╡рд╛рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЖрдк рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЛ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рддреЛ рдЙрдирдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд╛рдлреА рдХрдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
  5. рдпрджрд┐ рдЖрдк рдХреБрдЫ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред

рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╕рд╛рдордЧреНрд░реА рд╕рд╣рд╛рдпрдХ рдереАред рд╢рд╛рдпрдж рдпрд╣ рдЙрдЦрдбрд╝ рдЧрдпрд╛, рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдШреЛрд╖рд┐рдд рдХреБрдЫ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд▓рд┐рдЦрд┐рдП, рдореИрдВ рдЗрд╕реЗ рдЦрддреНрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

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


All Articles