рдЬрдм рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд▓рдЪреАрд▓реЗ (рдкрд╣рд▓реЗ рдЕрдЬреНрдЮрд╛рдд, рдЕрдХреНрд╕рд░ рд╕рдВрд╢реЛрдзрд┐рдд) рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЖрдорддреМрд░ рдкрд░ "рдорд╣рд╛рди рдФрд░ рднрдпрд╛рдирдХ" рдИрдПрд╡реА рдкреИрдЯрд░реНрди, рдпрд╛ рдЕрдм рдлреИрд╢рдиреЗрдмрд▓ рдПрдирдУрдПрд╕рдХреНрдпреВрдПрд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВред
рдмрд╣реБрдд рд╕рдордп рдкрд╣рд▓реЗ рдРрд╕рд╛ рдХрд╛рдо рдореЗрд░реЗ рд╕рд╛рдордиреЗ рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ред
-
рдИрдПрд╡реА ред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд▓рдЧрд╛рддрд╛рд░ рд╢рддреНрд░реБрддрд╛ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рд╕рднреА рдирдХрд╛рд░рд╛рддреНрдордХ (рдкрддрдВрдЧ, рдлрд╛рдЙрд▓рд░, рдХрд╛рд░реНрд╡рд┐рди, рдЧреЛрд░рдорди) рдмрд╣реБрдд рд╕рд╛рд░реЗ рдереЗред рдореБрдЦреНрдп рдиреБрдХрд╕рд╛рди рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рд╢реНрди рд▓рд┐рдЦрддреЗ рд╕рдордп, рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрд╕реНрдерд╛рдУрдВ ("рдХрд░реНрдордЪрд╛рд░реА", "рд╣реЛрдо", "рдХреНрд▓рд╛рдЗрдВрдЯ", рдЬреЛ рдХрд┐ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЗ рд▓рд┐рдП рд╣реИ) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдкрд░ рдЖрдпреЛрдЬрд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде (рднреНрд░рдо рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╕рдмрд╕реЗ рдЕрд╡рд╛рдВрдЫрдиреАрдп рд╡рд┐рдХрд▓реНрдк рдерд╛ред
-
рдПрдирдУрдПрд╕рдХреНрдпреВрдПрд▓ ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдмрд╣реБрдд рд░реБрдЪрд┐ рд░рдЦрддрд╛ рдерд╛ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, MongoDB)ред рд╕рдВрдмрдВрдзрдкрд░рдХ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рдж, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдк рдХреБрд▓ рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдХреА рднрд╛рд╡рдирд╛ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреА рд╕рд╛рдВрд╕ рдХреЛ рджреВрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред рдХрд┐рд╕реА рднреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХрд╛ рднрдВрдбрд╛рд░рдг, рдирдП рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рддреНрд╡рд░рд┐рдд рдирд┐рд░реНрдорд╛рдг, рдЙрдирд╕реЗ рдЕрдиреБрд░реЛрдз - рд╕реМрдВрджрд░реНрдп! рд▓реЗрдХрд┐рди рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рдж, рдЙрддреНрд╕рд╛рд╣ рдХрдо рд╣реЛрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛, рдФрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ рджрд┐рдЦрд╛рдИ рдЧрдИрдВ:
- рдЦрд░рд╛рдм рдХреНрд╡реЗрд░реА рднрд╛рд╖рд╛ (IMHO) + рдЬреЛрдбрд╝ рдХреА рдХрдореА;
- рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдЕрднрд╛рд╡ (рдПрдХ рдЕрдЪреНрдЫрд╛ рд▓реЗрдЦ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдерд╛ (рдФрд░ рдХреЗрд╡рд▓ рдЗрд╕ рдПрдХ рдкрд░ рдирд╣реАрдВ)
habrahabr.ru/post/164361 );
- рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдЕрдЦрдВрдбрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд░реНрдерди рдХрд╛ рдЕрднрд╛рд╡;
- рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд╛рд░реНрдпрд╡рд┐рдзрд┐рдпреЛрдВ / рдХрд╛рд░реНрдпреЛрдВ, рдЯреНрд░рд┐рдЧрд░, рд╡рд┐рдЪрд╛рд░ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ рдХреЗ рд░реВрдк рдореЗрдВ рдЧреИрдЬреЗрдЯреНрд╕ рдХрд╛ рдЕрднрд╛рд╡ред
- рдореЗрд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ, рдПрдХ рд▓рдЪреАрд▓реА (рдЪрд░) рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд╛рдзрд╛рд░рдг рд╕реНрдереИрддрд┐рдХ рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ, рд╡рд┐рдЬрд╝рд┐рдЯ, рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ, рдЖрджрд┐ рдХреА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ред рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ (рдлрд┐рд░ рд╕реЗ IMHO) рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ (рдЕрдзрд┐рдХ рд╕рдорд╛рди рд╕рдВрджрд░реНрднрд╛рддреНрдордХ рдЕрдЦрдВрдбрддрд╛, рдЖрджрд┐) рдореЗрдВ рдЕрдзрд┐рдХ рд╕рд░рд▓ рдФрд░ (рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг) рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИред
рдореИрдВрдиреЗ рдУрдЖрд░рдПрдо (рдпрд╣ рд╕реНрдкреНрд░рд┐рдВрдЧ рдбреЗрдЯрд╛ рдерд╛) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ (рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ) рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЗрд╕рдиреЗ рдореБрдЭреЗ рд╡рд╕реНрддреБрдУрдВ рдкрд░ рд╕рд╣рди рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рд╢реНрди рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рд╕рднреА рд╡рд░реНрдЧреЛрдВ (рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЧреНрд░рд╣реЛрдВ рдХреЗ рдЕрдиреБрд░реВрдк) рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрдирд╛рдиреЗ рдФрд░ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореЗрд░реЗ рд▓рд┐рдП, рдпрд╣ рдлрд┐рдЯ рдирд╣реАрдВ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдЕрдХреНрд╕рд░ рдФрд░ рдЬрд▓реНрджреА рд╕реЗ рдмрдирд╛рдпрд╛ рдФрд░ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП - "рдЪрд▓рддреЗ-рдлрд┐рд░рддреЗ"ред
рджреВрд╕рд░рд╛ - рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдиреНрдп рд╕рднреА рд╕рдВрдЧреНрд░рд╣ рдХреА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдХрд░, рдЖрджрд┐ред
рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдЪреАрдЬреЗрдВ рдирд╣реАрдВ рдЖрдИрдВ, рдлреЗрдВрдХ рджреА рдЧрдИрдВ ...
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдореЗрд░рд╛ рдЖрдзрд╛рд░ рдмрд╣реБрдд рд╣реА рдирд╛рдЬреБрдХ рд╕рдВрд░рдЪрдирд╛ рд╕реЗ рдорд┐рд▓рддрд╛-рдЬреБрд▓рддрд╛ рдерд╛, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрд╡реЗрджрди рдкрд░ рдирд┐рд░реНрднрд░ рдерд╛, рд╕рд╛рде рд╣реА рдореБрдЭреЗ рдХрдИ рдЪреАрдЬреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рдЬреЛ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрдмрдВрдз рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рд╕рдХрддреЗ рдереЗред рд╢рд╛рдпрдж рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рдореИрдВ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛, рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдХрдо рдирд╣реАрдВ рдерд╛ред
рдЕрдЧрд▓рд╛, рдореИрдВрдиреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ рдХрд┐ рд░рд┐рд▓реЗрд╢рдирд▓ рдФрд░ рдПрдирдУрдПрд╕рдХреНрдпреВрдПрд▓ рдбреАрдмреАрдПрдордПрд╕ рдХреЛ рдорд┐рд▓рд╛рдХрд░ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдПрдХ рддрд░рдл, рд╕рднреА рд╕рдВрд▓рдЧреНрди рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдз рдХреА рд╕рднреА рд╢рдХреНрддрд┐, рджреВрд╕рд░реА рддрд░рдл - рджрд╕реНрддрд╛рд╡реЗрдЬрд╝-рдЙрдиреНрдореБрдЦ рд╕рдорд╛рдзрд╛рди рдХреА рд╕рд╣рдЬрддрд╛ рдФрд░ рд▓рд╛рд▓рд┐рддреНрдпред рджрд░рдЕрд╕рд▓, рдХреБрдЫ рдЕрд▓рдЧ рд╡рд┐рд╢реЗрд╖ рддрд╛рд▓рд┐рдХрд╛ (рдУрдВ) рдореЗрдВ рдПрдХ рд▓рдЪреАрд▓реА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, xml рдкреНрд░рд╛рд░реВрдк рдореЗрдВ, рдФрд░ XPATH рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрд░реЗрдВ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рдХрдИ рдЖрдзреБрдирд┐рдХ рдбреАрдмреАрдПрдордПрд╕ рдиреЗ рдПрдХреНрд╕рдПрдордПрд▓ (рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ рд╕рд╣рд┐рдд) рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рд╣реИрдВред
рдореИрдВрдиреЗ Postgresql рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЗрд╕рд╕реЗ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдкреНрд░рд╢реНрди рдХреИрд╕реЗ рджрд┐рдЦреЗрдВрдЧреЗ:
рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рджреЛ рд╕рд░реНрд╡рд┐рд╕ рдЯреЗрдмрд▓ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдмрд╣реБрдд рдХрдо рд╣реИрдВ:
CREATE TABLE classes ( id integer NOT NULL, name text, is_closed boolean, obects_count integer, CONSTRAINT classes_pk PRIMARY KEY (id ) ); CREATE TABLE objects ( id integer NOT NULL, body xml, id_classes integer, CONSTRAINT objects_pk PRIMARY KEY (id ), CONSTRAINT classes_objects FOREIGN KEY (id_classes) REFERENCES classes (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION ); CREATE INDEX fki_classes_objects ON objects USING btree (id_classes );
рд╣рдо рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рджреЛ рд╕рдВрд╕реНрдерд╛рдПрдБ рдмрдирд╛рддреЗ рд╣реИрдВ:
INSERT INTO classes( id, name, is_closed, obects_count) VALUES (1, 'customers', FALSE, 0); INSERT INTO classes( id, name, is_closed, obects_count) VALUES (2, 'orders', FALSE, 0);
рд╣рдо рдкрд░реАрдХреНрд╖рдг рд░реИрдВрдбрдо рдбреЗрдЯрд╛ (рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛) рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдХрд╛рд░реНрдп рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ:
CREATE OR REPLACE FUNCTION random(numeric, numeric) RETURNS numeric AS $BODY$ SELECT ($1 + ($2 - $1) * random())::numeric; $BODY$ LANGUAGE sql VOLATILE COST 100; CREATE OR REPLACE FUNCTION random_string(length integer) RETURNS text AS $BODY$ declare chars text[] := '{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z}'; result text := ''; i integer := 0; begin if length < 0 then raise exception 'Given length cannot be less than 0'; end if; for i in 1..length loop result := result || chars[1+random()*(array_length(chars, 1)-1)]; end loop; return result; end; $BODY$ LANGUAGE plpgsql VOLATILE COST 100;
рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рддрд╛рд▓рд┐рдХрд╛ рднрд░рдирд╛, рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╡рд╕реНрддреБрдПрдБ "рдХреНрд▓рд╛рдЗрдВрдЯ" рдФрд░ "рдСрд░реНрдбрд░" (рдПрдХ-рд╕реЗ-рдХрдИ рд╕рдВрдмрдВрдз, рдкреНрд░рддреНрдпреЗрдХ рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдЕрдиреНрдп рдСрд░реНрдбрд░ рдХрд┐рдП рд╣реИрдВ):
DO $$ DECLARE customer_pk integer; order_pk integer; BEGIN FOR i in 1..10000 LOOP customer_pk := nextval('objects_id_seq'); order_pk := nextval('objects_id_seq'); insert into objects (body, id_classes) values(( '<Customers> <Customer> <ID>' || customer_pk || '</ID> <Name>' || random_string('10') || '</Name> <Partners>' || random_string('10') || '</Partners> </Customer> </Customers>')::xml, 1); for j in 1..5 LOOP insert into objects (body, id_classes) values(( '<Orders> <Order> <ID>' || order_pk || '</ID> <Customer_id>' || customer_pk || '</Customer_id> <Cost>' || random(1, 1000) || '</Cost> </Order> </Orders>')::xml, 2); end loop; END LOOP; END$$;
рдкрд╣рд▓рд╛ рдЕрдиреБрд░реЛрдз рд╣рдо рдЕрдзрд┐рдХрддрдо рдСрд░реНрдбрд░ рдореВрд▓реНрдп рдЪреБрдирддреЗ рд╣реИрдВ:
explain select max(((xpath('/Orders/Order/Cost/text()', O.body))[1])::text::float) as cost_of_order from Objects O where O.id_classes = 2;
рдЕрдиреБрд░реЛрдз рдереЛрдбрд╝рд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдХрд╛рдлреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ: рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЕрдиреБрд░реЛрдз рдХрд┐рд╕ рдЗрдХрд╛рдИ рдХреЛ рднреЗрдЬрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХрд┐рд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗред рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ, рдкреВрд░реНрдг рд╕реНрдХреИрди рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди рдХреБрдЫ рднреА рд╣рдореЗрдВ рд▓рд╛рдЧрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдмрдирд╛рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИ:
create index obj_orders_cost_idx on objects using btree (((xpath('/Orders/Order/Cost/text()', body))[1]::text::float));
рдФрд░ рдЕрдм рдЕрдиреБрд░реЛрдз рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:
рдЕрдм рдЪрд▓реЛ рдХрдИ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рдЖрджреЗрд╢реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреНред рджреЛ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛:
explain select (xpath('/Customers/Customer/Name/text()', C.body))[1] as customer , (xpath('/Orders/Order/Cost/text()', O.body))[1] as cost_of_order from objects C , objects O where C.id_classes = 1 and O.id_classes = 2 and (xpath('/Orders/Order/Customer_id/text()', O.body))[1]::text::int = (xpath('/Customers/Customer/ID/text()', C.body))[1]::text::int and ((xpath('/Customers/Customer/ID/text()' ,C.body))[1])::text::int between 1997585 and 1997595;
рдлреБрд▓рд╕реНрдХреИрди рдЕрдкреЗрдХреНрд╖рд┐рдд, рдЕрдм рд╕реВрдЪрдХрд╛рдВрдХ рдереЛрдбрд╝рд╛:
create index obj_customers_id_idx on objects using btree (((xpath('/Customers/Customer/ID/text()', body))[1]::text::int)); create index obj_orders_id_idx on objects using btree (((xpath('/Orders/Order/ID/text()', body))[1]::text::int)); create index obj_orders_customerid_idx on objects using btree (((xpath('/Orders/Order/Customer_id/text()', body))[1]::text::int));
рдЕрдм рдпрд╣ рдФрд░ рдордЬреЗрджрд╛рд░ рд╣реИ:
рдЗрд╕ рдЕрдиреБрд░реЛрдз рдиреЗ рднреА рдЕрдкрдиреА рд╕реНрдкрд╖реНрдЯрддрд╛ рдирд╣реАрдВ рдЦреЛрдИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕реЗ рдФрд░ рднреА рдХрдВрдШреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдкрд╛рдВрддрд░рдг рд╕реЗ рдирд┐рдкрдЯрдирд╛, рдПрдХреНрд╕рдПрдордПрд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛, рдЖрджрд┐ред рдЕрднреА рднреА рдмрд╣реБрдд рдХрд╛рдо рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИред
рдФрд░ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
1. рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд▓рдЪреАрд▓реА рдЦреЛрдЬ;
2. рд╡рд╕реНрддреБрдУрдВ рдХреА рдореЗрдЬ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ), рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрдбрд╝реА рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рднреМрддрд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ xml рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рдирд╡реАрдирддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдореЗрд░реЗ рдкреНрд░рд╢реНрди рдХрд╛ рд╣рд▓ рдЦреЛрдЬрддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдЬрд╛рдирдХрд╛рд░реА рдереА, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдирд╛ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдХрд╛рдо рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ / рдпрд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛рдУрдВ рдФрд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╕реБрдирддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдПрдХ рд╕рдорд╛рди рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИред