рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА PostgreSQL
рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ рдЗрдВрдЬрди ,
рдПрдХреНрд╕реЗрд╕ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░ рддреАрди рд╡рд┐рдзрд┐рдпреЛрдВ:
рд╣реИрд╢ рдЗрдВрдбреЗрдХреНрд╕ ,
рдмреА-рдЯреНрд░реА рдФрд░
GiST рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рд╣реИ ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо SP-GiST рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗред
SP-рд╕рд╛рд░
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕ рдирд╛рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред "GiST" рд╕рдорд╛рди рдирд╛рдо рдПрдХреНрд╕реЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рднрд╛рдЧ рджреЗрддрд╛ рд╣реИред рд╕рдорд╛рдирддрд╛ рдореМрдЬреВрдж рд╣реИ: рджреЛрдиреЛрдВ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдЦреЛрдЬ рдкреЗрдбрд╝ рд╣реИрдВ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкрд╣реБрдВрдЪ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд░реВрдкрд░реЗрдЦрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рд╕реНрдкреЗрд╕ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд▓рд┐рдП "рдПрд╕рдкреА" рдХрд╛ рдЕрд░реНрде рд╣реИред рдпрд╣рд╛рдБ рдЕрдВрддрд░рд┐рдХреНрд╖ рдЕрдХреНрд╕рд░ рдмрд╕ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдПрдХ рд╕реНрдерд╛рди рдкрд░ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреЛ-рдЖрдпрд╛рдореА рд╡рд┐рдорд╛рдиред рд▓реЗрдХрд┐рди рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХрд┐рд╕реА рднреА рдЦреЛрдЬ рд╕реНрдерд╛рди рдХрд╛ рдЕрд░реНрде рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рднреА рдореВрд▓реНрдп рдбреЛрдореЗрдиред
рдПрд╕рдкреА-рдЬреАрдПрд╕рдЯреА рдЙрди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдЬрд╣рд╛рдВ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЛ рдкреБрди:
рдЧреИрд░ -рдЕрдВрддрд░рдХреНрд╖реЗрддреНрд░реАрдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдЪрддреБрд╖реНрдХреЛрдг, k- рдЖрдпрд╛рдореА рд╡реГрдХреНрд╖ (kD рдкреЗрдбрд╝), рдФрд░ рдореВрд▓рд╛рдВрдХ рд╡реГрдХреНрд╖ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рд╕рдВрд░рдЪрдирд╛
рдЗрд╕рд▓рд┐рдП, рдПрд╕рдкреА-рдЬреАрдИрдПрд╕рдЯреА рдПрдХреНрд╕реЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдореВрд▓реНрдп рдбреЛрдореЗрди рдХреЛ
рдЧреИрд░-рдЕрддрд┐рд╡реНрдпрд╛рдкреА рдЙрдк
- рдбреЛрдореЗрди рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╣реИ,
рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдмрджрд▓реЗ рдореЗрдВ рднреА рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рд╡рд┐рднрд╛рдЬрди
рдЧреИрд░-рд╕рдВрддреБрд▓рд┐рдд рдкреЗрдбрд╝реЛрдВ (рдмреА-рдкреЗрдбрд╝реЛрдВ рдФрд░ рдирд┐рдпрдорд┐рдд рдЬреАрдПрд╕рдЯреА рдХреЗ рд╡рд┐рдкрд░реАрдд) рдХреЛ рдкреНрд░реЗрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдиреЙрди-рдЗрдВрдЯрд░рд╕реЗрдХреНрдЯрд┐рдВрдЧ рд╣реЛрдиреЗ рдХрд╛ рдЧреБрдг рд╕рдореНрдорд┐рд▓рди рдФрд░ рдЦреЛрдЬ рдХреЗ рджреМрд░рд╛рди рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдкреНрд░реЗрд░рд┐рдд рдкреЗрдбрд╝ рдХрдо рд╢рд╛рдЦрд╛рдУрдВ рд╡рд╛рд▓реЗ рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреНрд╡рд╛рдбрдЯреНрд░реА рдХреЗ рдиреЛрдб рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдЪрд╛рд░ рдмрд╛рд▓ рдиреЛрдб рд╣реЛрддреЗ рд╣реИрдВ (рдмреА-рдкреЗрдбрд╝реЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрд╣рд╛рдВ рдиреЛрдбреНрд╕ рдХреА рдорд╛рддреНрд░рд╛ рд╕реИрдХрдбрд╝реЛрдВ рд╣реЛрддреА рд╣реИ) рдФрд░ рдмрдбрд╝реА рдЧрд╣рд░рд╛рдИред рдЗрди рдкреЗрдбрд╝реЛрдВ рдХреА рддрд░рд╣ рд░реИрдо рдореЗрдВ рдХрд╛рдо рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реВрдЪрдХрд╛рдВрдХ рдПрдХ рдбрд┐рд╕реНрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП, I / O рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреЛрдбреНрд╕ рдХреЛ рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдкреИрдХ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдХреБрд╢рд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдордп рд╢рд╛рдЦрд╛ рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдЕрдВрддрд░ рдХреЗ рдХрд╛рд░рдг рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдПрдХреНрд╕реЗрд╕ рд╡рд┐рдзрд┐, GiST рдХреЗ рд╕рдорд╛рди рддрд░реАрдХрд╛, рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдХрд╛рд░реНрдпреЛрдВ (рдПрдХ рд╕рд╛рде рдПрдХреНрд╕реЗрд╕ рдФрд░ рд▓реЙрдХ, рд▓реЙрдЧрд┐рдВрдЧ рдФрд░ рдПрдХ рд╢реБрджреНрдз рдЦреЛрдЬ рдПрд▓реНрдЧреЛрд░рд┐рджрдо) рдХрд╛ рдЦреНрдпрд╛рд▓ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдирдП рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдФрд░ рдирдП рд╡рд┐рднрд╛рдЬрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рд░рд▓реАрдХреГрдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
SP-GiST рдЯреНрд░реА рдХрд╛ рдЖрдВрддрд░рд┐рдХ рдиреЛрдб рдмрд╛рд▓ рдиреЛрдбреНрд╕ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ; рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рдПрдХ
рд▓реЗрдмрд▓ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдЖрдВрддрд░рд┐рдХ рдиреЛрдб рдПрдХ
рдЙрдкрд╕рд░реНрдЧ рдирд╛рдордХ рдПрдХ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдореВрд▓реНрдп рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рд╡рд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ; рдЗрд╕реЗ рдПрдХ рдордирдорд╛рдирд╛ рд╡рд┐рдзреЗрдп рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╕рднреА рдмрдЪреНрдЪреЗ рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдорд┐рд▓рддрд╛ рд╣реИред
SP-GiST рдХреЗ рд▓реАрдл рдиреЛрдбреНрд╕ рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдорд╛рди рдФрд░ рддрд╛рд▓рд┐рдХрд╛ рдкрдВрдХреНрддрд┐ (TID) рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реЛрддрд╛ рд╣реИред рд╕реНрд╡рдпрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдбреЗрдЯрд╛ (рдЦреЛрдЬ рдХреБрдВрдЬреА) рдХрд╛ рдЙрдкрдпреЛрдЧ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдирд┐рд╡рд╛рд░реНрдп рдирд╣реАрдВ: рдПрдХ рдЫреЛрдЯрд╛ рдореВрд▓реНрдп рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓реАрдл рдиреЛрдбреНрд╕ рдХреЛ рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рдмрд╛рдВрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рддреЛ, рдПрдХ рдЖрдВрддрд░рд┐рдХ рдиреЛрдб рди рдХреЗрд╡рд▓ рдПрдХ рдореВрд▓реНрдп, рдмрд▓реНрдХрд┐ рдПрдХ рдкреВрд░реА рд╕реВрдЪреА рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд▓реАрдл рдиреЛрдбреНрд╕ рдореЗрдВ рдЙрдкрд╕рд░реНрдЧ, рд▓реЗрдмрд▓ рдФрд░ рдорд╛рди рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИрдВред
GiST рдХреА рддрд░рд╣ рд╣реА, рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рдХрд╛рд░реНрдп
рд╕рдВрдЧрддрд┐ рдлрд╝рдВрдХреНрд╢рди рд╣реИ ред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЯреНрд░реА рдиреЛрдб рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмрдЪреНрдЪреЗ рдХреЗ рдиреЛрдбреНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рдирдХреЗ рдорд╛рди "рдЦреЛрдЬ рд╡рд┐рдзреЗрдп рдХреЗ рд╕рд╛рде" рд╕реБрд╕рдВрдЧрдд рд╣реИрдВ (рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, "
рдЕрдиреБрдХреНрд░рдорд┐рдд-рдлрд╝реАрд▓реНрдб рдСрдкрд░реЗрдЯрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ ")ред рдкрддреНрддреА рдиреЛрдб рдХреЗ рд▓рд┐рдП, рд╕рдВрдЧрддрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдиреЛрдб рдореЗрдВ рдЕрдиреБрдХреНрд░рдорд┐рдд рдорд╛рди рдЦреЛрдЬ рд╡рд┐рдзреЗрдп рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИред
рдЦреЛрдЬ рд░реВрдЯ рдиреЛрдб рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рд╕реНрдерд┐рд░рддрд╛ рд╕рдорд╛рд░реЛрд╣ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдмрдЪреНрдЪрд╛ рдпрд╣ рдпрд╛рддреНрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рдкрд╛рдП рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдХреЗ рд▓рд┐рдП рджреЛрд╣рд░рд╛рддрд╛ рд╣реИред рдЦреЛрдЬ рдЧрд╣рд░рд╛рдИ-рдкрд╣рд▓реЗ рд╣реИред
рднреМрддрд┐рдХ рд╕реНрддрд░ рдкрд░, I / O рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдиреЛрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдбреЗрдХреНрд╕ рдиреЛрдбреНрд╕ рдХреЛ рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдПрдХ рдкреГрд╖реНрда рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдпрд╛ рдкрддреНрддреА рдиреЛрдбреНрд╕ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рджреЛрдиреЛрдВ рдирд╣реАрдВред
рдЙрджрд╛рд╣рд░рдг: рдЪрддреБрд░реНрднреБрдЬ
рдкреНрд▓реЗрди рдореЗрдВ рдкреЙрдЗрдВрдЯреНрд╕ рдЗрдВрдбреЗрдХреНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╡рд╛рдбрдЯреНрд░реА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ
рдХрд┐ рдХреЗрдВрджреНрд░реАрдп рдмрд┐рдВрджреБ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЪрд╛рд░ рднрд╛рдЧреЛрдВ (рдЪрддреБрд╖реНрдХреЛрдгреЛрдВ) рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдкреЗрдбрд╝ рдореЗрдВ рд╢рд╛рдЦрд╛рдУрдВ рдХреА рдЧрд╣рд░рд╛рдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдЙрдкрдпреБрдХреНрдд рдХреНрд╡рд╛рдбреНрд░рдВрдЯ рдореЗрдВ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдШрдирддреНрд╡ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред
рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдВрдХрдбрд╝реЛрдВ рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдЯ
openflights.org рд╕реЗ рд╣рд╡рд╛рдИ рдЕрдбреНрдбреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╡рд░реНрдзрд┐рдд
рдбреЗрдореЛ рдбреЗрдЯрд╛рдмреЗрд╕ ред рд╡реИрд╕реЗ, рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╣рдордиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд┐рд╕рдореЗрдВ, рдмрд╛рдХреА рдХреЗ рдмреАрдЪ, рд╣рдордиреЗ "рдкреЙрдЗрдВрдЯ" рдХреЗ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рджреЗрд╢рд╛рдВрддрд░ рдФрд░ рдЕрдХреНрд╖рд╛рдВрд╢ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ рд╡рд┐рдорд╛рди рдХреЛ рдЪрд╛рд░ рдЪрддреБрд░реНрднреБрдЬреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ ...
рдлрд┐рд░ рд╣рдордиреЗ рдкреНрд░рддреНрдпреЗрдХ рдЪрддреБрд░реНрднреБрдЬ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ ...
рдФрд░ рдЗрд╕рд▓рд┐рдП рдЬрдм рддрдХ рд╣рдо рдЕрдВрддрд┐рдо рд╡рд┐рднрд╛рдЬрди рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд▓реЗрддреЗредрдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА
GiST- рд╕рдВрдмрдВрдзрд┐рдд рд▓реЗрдЦ рдореЗрдВ рдорд╛рдирд╛ рдерд╛ред рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡рд┐рднрд╛рдЬрди рдХреНрдпрд╛ рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:

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

рд╕реАрдорд╛ рдкрд░ рдЭреВрда рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рдмрд┐рдВрджреБ, рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЪрддреБрд░реНрдерд╛рдВрд╢ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред
postgres=# create table points(p point); postgres=# insert into points(p) values (point '(1,1)'), (point '(3,2)'), (point '(6,3)'), (point '(5,5)'), (point '(7,8)'), (point '(8,6)'); postgres=# create index points_quad_idx on points using spgist(p);
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, "quad_point_ops" рдСрдкрд░реЗрдЯрд░ рд╡рд░реНрдЧ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдСрдкрд░реЗрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
postgres=# select amop.amopopr::regoperator, amop.amopstrategy from pg_opclass opc, pg_opfamily opf, pg_am am, pg_amop amop where opc.opcname = 'quad_point_ops' and opf.oid = opc.opcfamily and am.oid = opf.opfmethod and amop.amopfamily = opc.opcfamily and am.amname = 'spgist' and amop.amoplefttype = opc.opcintype;
amopopr | amopstrategy -----------------+-------------- <<(point,point) | 1 strictly left >>(point,point) | 5 strictly right ~=(point,point) | 6 coincides <^(point,point) | 10 strictly below >^(point,point) | 11 strictly above <@(point,box) | 8 contained in rectangle (6 rows)
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрд╡реЗрд░реА
select * from points where p >^ point '(2,7)'
рдХреИрд╕реЗ
select * from points where p >^ point '(2,7)'
рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХреЛ рджреЗрдЦреЗрдВ рдЬреЛ рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рдХреЗ рдКрдкрд░ рд╕реНрдерд┐рдд рд╣реИрдВ)ред

рд╣рдо рд░реВрдЯ рдиреЛрдб рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ рдмрдЪреНрдЪреЗ рдХреЛ рдЙрддрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЛрдбреНрд╕ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧрддрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдСрдкрд░реЗрдЯрд░
>^
, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдиреЛрдб (4,4) рдХреЗ рдХреЗрдВрджреНрд░реАрдп рдмрд┐рдВрджреБ рдХреЗ рд╕рд╛рде рдмрд┐рдВрджреБ (2,7) рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрди рдХреНрд╡реИрдбреЗрдВрдЯреНрд╕ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдореЗрдВ рдорд╛рдВрдЧреЗ рдЧрдП рдмрд┐рдВрджреБ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд╣рд▓рд╛ рдФрд░ рдЪреМрдерд╛ рдХреНрд╡рд╛рдбреНрд░рдВрдЯред
рдкрд╣рд▓реЗ рдЪрддреБрд░реНрдерд╛рдВрд╢ рдХреЗ рдЕрдиреБрд░реВрдк рдиреЛрдб рдореЗрдВ, рд╣рдо рдлрд┐рд░ рд╕реЗ рд╕реНрдерд┐рд░рддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдЪреНрдЪреЗ рдХреЗ рдиреЛрдбреНрд╕ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреЗ рд╣реИрдВред рдХреЗрдВрджреНрд░реАрдп рдмрд┐рдВрджреБ (6,6) рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдЪреМрдереЗ рдЪрддреБрд░реНрдерд╛рдВрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рд▓реАрдл рдиреЛрдбреНрд╕ (8.6) рдФрд░ (7.8) рдХреА рд╕реВрдЪреА рдкрд╣рд▓реЗ рдЪрддреБрд░реНрдерд╛рдВрд╢ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдмрд┐рдВрджреБ (7.8) рдХреНрд╡реЗрд░реА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИред рдЪреМрдереЗ рдЪрддреБрд░реНрдерд╛рдВрд╢ рдХрд╛ рд╕рдВрджрд░реНрдн рдЦрд╛рд▓реА рд╣реИред
рдЖрдВрддрд░рд┐рдХ рдиреЛрдб (4.4) рдореЗрдВ, рдЪреМрдереЗ рдЪрддреБрд░реНрдерд╛рдВрд╢ рдХрд╛ рд╕рдВрджрд░реНрдн рд░рд┐рдХреНрдд рд╣реИ, рдЬреЛ рдЦреЛрдЬ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред
postgres=# set enable_seqscan = off; postgres=# explain (costs off) select * from points where p >^ point '(2,7)';
QUERY PLAN ------------------------------------------------ Index Only Scan using points_quad_idx on points Index Cond: (p >^ '(2,7)'::point) (2 rows)
internals
рд╣рдо рдПрд╕рдкреА-рдЬреАрдИрдПрд╕рдЯреА рдЗрдВрдбреЗрдХреНрд╕ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ "
рдЬрд╡реЗрд▓ " рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдмреБрд░реА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рдмрдЧ рдХреЗ рдХрд╛рд░рдг, рдпрд╣ рдПрдХреНрд╕рдЯреЗрдВрд╢рди PostgreSQL рдХреЗ рдЖрдзреБрдирд┐рдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо "рдЬрд┐рд╡рд▓" (
рдЪрд░реНрдЪрд╛ ) рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде "рдкреЗрдЬрд┐рдиреНрд╕рдкреЗрдХреНрдЯ" рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред рдФрд░ рдмрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА "рдкреЗрдЬрд┐рдиреНрд╕рдкреИрдХреНрдЯ" рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдлрд┐рд░, рдмреБрд░реА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ рдкреИрдЪ рдкреНрд░рдЧрддрд┐ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЕрдЯрдХ рдЧрдпрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪрд▓реЛ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдбреЗрдореЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд▓реЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рджреБрдирд┐рдпрд╛ рдХреЗ рдирдХреНрд╢реЗ рдХреЗ рд╕рд╛рде рдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
demo=# create index airports_coordinates_quad_idx on airports_ml using spgist(coordinates);
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЖрдБрдХрдбрд╝реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
demo=# select * from spgist_stats('airports_coordinates_quad_idx');
spgist_stats ---------------------------------- totalPages: 33 + deletedPages: 0 + innerPages: 3 + leafPages: 30 + emptyPages: 2 + usedSpace: 201.53 kbytes+ usedInnerSpace: 2.17 kbytes + usedLeafSpace: 199.36 kbytes+ freeSpace: 61.44 kbytes + fillRatio: 76.64% + leafTuples: 5993 + innerTuples: 37 + innerAllTheSame: 0 + leafPlaceholders: 725 + innerPlaceholders: 0 + leafRedirects: 0 + innerRedirects: 0 (1 row)
рдФрд░ рджреВрд╕рд░рд╛, рд╣рдо рдЗрдВрдбреЗрдХреНрд╕ рдЯреНрд░реА рдХреЛ рд╕реНрд╡рдпрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
demo=# select tid, n, level, tid_ptr, prefix, leaf_value from spgist_print('airports_coordinates_quad_idx') as t( tid tid, allthesame bool, n int, level int, tid_ptr tid, prefix point,
tid | n | level | tid_ptr | prefix | leaf_value ---------+---+-------+---------+------------------+------------------ (1,1) | 0 | 1 | (5,3) | (-10.220,53.588) | (1,1) | 1 | 1 | (5,2) | (-10.220,53.588) | (1,1) | 2 | 1 | (5,1) | (-10.220,53.588) | (1,1) | 3 | 1 | (5,14) | (-10.220,53.588) | (3,68) | | 3 | | | (86.107,55.270) (3,70) | | 3 | | | (129.771,62.093) (3,85) | | 4 | | | (57.684,-20.430) (3,122) | | 4 | | | (107.438,51.808) (3,154) | | 3 | | | (-51.678,64.191) (5,1) | 0 | 2 | (24,27) | (-88.680,48.638) | (5,1) | 1 | 2 | (5,7) | (-88.680,48.638) | ...
рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ "рд╕реНрдкрд┐рдЧрд┐рд╕реНрдЯ_рдкреНрд░рд┐рдВрдЯ" рд╕рднреА рдкрддреНрддреА рдорд╛рдиреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реВрдЪреА рд╕реЗ рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рд╣реА рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреА рдкреВрд░реНрдг рд╕рд╛рдордЧреНрд░реА рдХреЗ рдмрдЬрд╛рдп рд╕реВрдЪрдХрд╛рдВрдХ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг: k- рдЖрдпрд╛рдореА рдкреЗрдбрд╝
рд╡рд┐рдорд╛рди рдореЗрдВ рд╕рдорд╛рди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдФрд░ рддрд░реАрдХрд╛ рднреА рд╕реБрдЭрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд╣рд▓реЗ рдмрд┐рдВрджреБ рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
рдПрдХ рдХреНрд╖реИрддрд┐рдЬ рд░реЗрдЦрд╛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рдорд╛рди рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ: рдКрдкрд░реА рдФрд░ рдирд┐рдЪрд▓рд╛ред рдЕрдиреБрдХреНрд░рдорд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рджреВрд╕рд░рд╛ рдмрд┐рдВрджреБ рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рднрд╛рдЧ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдЗрд╕ рдмрд┐рдВрджреБ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ,
рдПрдХ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд░реЗрдЦрд╛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рдЬреЛ рдЗрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреА рд╣реИ: рджрд╛рдПрдВ рдФрд░ рдмрд╛рдПрдВред рд╣рдо рдлрд┐рд░ рд╕реЗ рдЕрдЧрд▓реЗ рдмрд┐рдВрджреБ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдХреНрд╖реИрддрд┐рдЬ рд░реЗрдЦрд╛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд░реЗрдЦрд╛ рдЕрднреА рддрдХ рдЕрдЧрд▓реЗ рдмрд┐рдВрджреБ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдФрд░ рдЗрд╕реА рддрд░рд╣ред
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрдирд╛рдП рдЧрдП рдкреЗрдбрд╝ рдХреЗ рд╕рднреА рдЖрдВрддрд░рд┐рдХ рдиреЛрдбреНрд╕ рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рдмрд╛рд▓ рдиреЛрдб рд╣реЛрдВрдЧреЗред рджреЛ рд╕рдВрджрд░реНрднреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдпрд╛ рддреЛ рдЖрдВрддрд░рд┐рдХ рдиреЛрдб рддрдХ рд▓реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рдмрдЧрд▓ рдореЗрдВ рдпрд╛ рдкрддреНрддреА рдиреЛрдбреНрд╕ рдХреА рд╕реВрдЪреА рдореЗрдВ рд╣реИред
рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ k- рдЖрдпрд╛рдореА рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП, рдкреЗрдбрд╝реЛрдВ рдХреЛ рд╕рд╛рд╣рд┐рддреНрдп рдореЗрдВ k- рдЖрдпрд╛рдореА (kD рдкреЗрдбрд╝) рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣рд╡рд╛рдИ рдЕрдбреНрдбреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдзрд┐ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛:
рдкрд╣рд▓реЗ рд╣рдо рдкреНрд▓реЗрди рдХреЛ рдКрдкрд░реА рдФрд░ рдирд┐рдЪрд▓реЗ рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ ...
рдлрд┐рд░ рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рднрд╛рдЧ рдХреЛ рдмрд╛рдПрдБ рдФрд░ рджрд╛рдПрдБ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ ...
рдФрд░ рдЗрд╕рд▓рд┐рдП рдЬрдм рддрдХ рд╣рдо рдЕрдВрддрд┐рдо рд╡рд┐рднрд╛рдЬрди рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд▓реЗрддреЗредрдЗрд╕ рддрд░рд╣ рдПрдХ рд╡рд┐рднрд╛рдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛рддреЗ рд╕рдордп рдСрдкрд░реЗрдЯрд░ рд╡рд░реНрдЧ
"kd_point_ops" рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
postgres=# create index points_kd_idx on points using spgist(p kd_point_ops);
рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХреЗ рдСрдкрд░реЗрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬреИрд╕реЗ "рдбрд┐рдлрд╝реЙрд▓реНрдЯ" рд╡рд░реНрдЧ "quad_point_ops"ред
internals
рдЬрдм рдкреЗрдбрд╝ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЙрдкрд╕рд░реНрдЧ рдХреЗрд╡рд▓ рдПрдХ рдмрд┐рдВрджреБ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рд╕рдордиреНрд╡рдп рд╣реИ:
demo=# select tid, n, level, tid_ptr, prefix, leaf_value from spgist_print('airports_coordinates_kd_idx') as t( tid tid, allthesame bool, n int, level int, tid_ptr tid, prefix float,
tid | n | level | tid_ptr | prefix | leaf_value ---------+---+-------+---------+------------+------------------ (1,1) | 0 | 1 | (5,1) | 53.740 | (1,1) | 1 | 1 | (5,4) | 53.740 | (3,113) | | 6 | | | (-7.277,62.064) (3,114) | | 6 | | | (-85.033,73.006) (5,1) | 0 | 2 | (5,12) | -65.449 | (5,1) | 1 | 2 | (5,2) | -65.449 | (5,2) | 0 | 3 | (5,6) | 35.624 | (5,2) | 1 | 3 | (5,3) | 35.624 | ...
рдЙрджрд╛рд╣рд░рдг: рдореВрд▓рд╛рдВрдХ рд╡реГрдХреНрд╖
рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓рд╛рдВрдХ рд╡реГрдХреНрд╖ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП SP-GiST рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореВрд▓рд╛рдВрдХ рд╡реГрдХреНрд╖ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рдкрддреНрддреА рдХреЗ рдиреЛрдб рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдиреЛрдбреНрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдорд╛рдиреЛрдВ рдХреЛ рдПрдХ рд╕реЗ рдКрдкрд░ рдЬрдбрд╝ рддрдХ рд╕рдореЗрдЯ рдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдорд╛рди рд▓реЗрдВ, рд╣рдореЗрдВ рд╕рд╛рдЗрдЯ URL рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: "postgrespro.ru", "postgrespro.com", "postgresql.org", рдФрд░ "planet.postgresql.org"ред
postgres=# create table sites(url text); postgres=# insert into sites values ('postgrespro.ru'),('postgrespro.com'),('postgresql.org'),('planet.postgresql.org'); postgres=# create index on sites using spgist(url);
рдкреЗрдбрд╝ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦреЗрдЧрд╛:

рдЯреНрд░реА рд╕реНрдЯреЛрд░ рдХреЗ рдЖрдВрддрд░рд┐рдХ рдиреЛрдбреНрд╕ рд╕рднреА рдмрд╛рд▓ рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдЖрдо рдЙрдкрд╕рд░реНрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "stgres" рдХреЗ рдмрд╛рд▓ рдиреЛрдбреНрд╕ рдореЗрдВ, рдорд╛рди "p" + "o" + "stgres" рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВред
Quadtrees рдХреЗ рд╡рд┐рдкрд░реАрдд, рдПрдХ рдмрдЪреНрдЪреЗ рдХреЗ рдиреЛрдб рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдПрдХ рд╡рд░реНрдг рдХреЗ рд╕рд╛рде рд▓реЗрдмрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рджреЛ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ)ред
"Text_ops" рдСрдкрд░реЗрдЯрд░ рд╡рд░реНрдЧ рдмреА-рдЯреНрд░реА-рдЬреИрд╕реЗ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ: "рдмрд░рд╛рдмрд░", "рдЕрдзрд┐рдХ", рдФрд░ "рдХрдо":
postgres=# select amop.amopopr::regoperator, amop.amopstrategy from pg_opclass opc, pg_opfamily opf, pg_am am, pg_amop amop where opc.opcname = 'text_ops' and opf.oid = opc.opcfamily and am.oid = opf.opfmethod and amop.amopfamily = opc.opcfamily and am.amname = 'spgist' and amop.amoplefttype = opc.opcintype;
amopopr | amopstrategy -----------------+-------------- ~<~(text,text) | 1 ~<=~(text,text) | 2 =(text,text) | 3 ~>=~(text,text) | 4 ~>~(text,text) | 5 <(text,text) | 11 <=(text,text) | 12 >=(text,text) | 14 >(text,text) | 15 (9 rows)
рдЯрд┐рд▓реНрдбреНрд╕ рдХреЗ рд╕рд╛рде рдСрдкрд░реЗрдЯрд░реЛрдВ рдХрд╛ рднреЗрдж рдпрд╣ рд╣реИ рдХрд┐ рд╡реЗ
рдкрд╛рддреНрд░реЛрдВ рдХреЗ рдмрдЬрд╛рдп
рдмрд╛рдЗрдЯреНрд╕ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХрд░рддреЗ рд╣реИрдВред
рдХрднреА-рдХрднреА, рдореВрд▓рд╛рдВрдХ рд╡реГрдХреНрд╖ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдмреА-рд╡реГрдХреНрд╖ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдореВрд▓реНрдп рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреЗрдбрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрддрд░рддреЗ рд╕рдордп рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд╕рдВрдЧрдард┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдХреНрд╡реЗрд░реА рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
select * from sites where url like 'postgresp%ru'
ред рдпрд╣ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
postgres=# explain (costs off) select * from sites where url like 'postgresp%ru';
QUERY PLAN ------------------------------------------------------------------------------ Index Only Scan using sites_url_idx on sites Index Cond: ((url ~>=~ 'postgresp'::text) AND (url ~<~ 'postgresq'::text)) Filter: (url ~~ 'postgresp%ru'::text) (3 rows)
рджрд░рдЕрд╕рд▓, рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ "рдкреЛрд╕реНрдЯрдЧреНрд░реИрд╕" рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдмрд░рд╛рдмрд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди "рдкреЛрд╕реНрдЯрдЧреНрд░реИрд╕реЗрдХ" (рдЗрдВрдбреЗрдХреНрд╕ рдХреЙрдиреНрдб) рд╕реЗ рдХрдо рд╣реИ, рдФрд░ рдлрд┐рд░ рдорд┐рд▓рд╛рди рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрд░рд┐рдгрд╛рдо (рдлрд╝рд┐рд▓реНрдЯрд░) рд╕реЗ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдерд┐рд░рддрд╛ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рддрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ "рдкреА" рд░реВрдЯ рдХреЗ рдХреМрди рд╕реЗ рдмрдЪреНрдЪреЗ рдХреЛ рд╣рдореЗрдВ рдЙрддрд░рдирд╛ рд╣реИред рджреЛ рд╡рд┐рдХрд▓реНрдк рдЙрдкрд▓рдмреНрдз рд╣реИрдВ: "рдкреА" + "рдПрд▓" (рдЙрддрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдХрд┐ рдЧрд╣рд░рд╛рдИ рд╕реЗ рдЧреЛрддрд╛рдЦреЛрд░реА рдХреЗ рдмрд┐рдирд╛ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реИ) рдФрд░ "рдкреА" + "рдУ" + "рд╕реНрдЯреНрд░реЗрд╕" (рд╡рдВрд╢ рдХреЛ рдЬрд╛рд░реА рд░рдЦреЗрдВ)ред
"Stgres" рдиреЛрдб рдХреЗ рд▓рд┐рдП, "postgres" + "p" + "ro" рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧрддрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рдлрд┐рд░ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реИред (рд╡рдВрд╢ рдЬрд╛рд░реА рд░рдЦреЗрдВ) рдФрд░ "рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ" + "рдХреНрдпреВ" (рдЙрддрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ)ред
"рдЖрд░рдУ" рдХреЗ рд▓рд┐рдПред рдиреЛрдб рдФрд░ рдЙрд╕рдХреЗ рд╕рднреА рдмрд╛рд▓ рдкрддреНрддреА рдиреЛрдбреНрд╕, рд╕реНрдерд┐рд░рддрд╛ рдлрд╝рдВрдХреНрд╢рди "рд╣рд╛рдВ" рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╕реВрдЪрдХрд╛рдВрдХ рд╡рд┐рдзрд┐ рджреЛ рдорд╛рди рд▓реМрдЯрд╛рдПрдЧреА: "postgrespro.com" рдФрд░ "postgrespro.ru"ред рдПрдХ рдорд┐рд▓рд╛рди рдореВрд▓реНрдп рдЙрдиреНрд╣реЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдЪрд░рдг рдореЗрдВ рдЪреБрдирд╛ рдЬрд╛рдПрдЧрд╛ред

internals
рдЬрдм рдкреЗрдбрд╝ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рд╣реЛрдЧрд╛:
postgres=# select * from spgist_print('sites_url_idx') as t( tid tid, allthesame bool, n int, level int, tid_ptr tid, prefix text,
рдЧреБрдг
рдЖрдЗрдП SP-GiST рдкрд╣реБрдВрдЪ рд╡рд┐рдзрд┐ рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ (рдкреНрд░рд╢реНрди
рдкрд╣рд▓реЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдереЗ ):
amname | name | pg_indexam_has_property --------+---------------+------------------------- spgist | can_order | f spgist | can_unique | f spgist | can_multi_col | f spgist | can_exclude | t
SP-GiST рдЗрдВрдбреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЫрдБрдЯрд╛рдИ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрджреНрд╡рд┐рддреАрдп рдЕрд╡рд░реЛрдз рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХрдИ рд╕реНрддрдВрднреЛрдВ рдкрд░ (рдЬреАрдПрд╕рдЯреА рдХреЗ рд╡рд┐рдкрд░реАрдд) рдирд╣реАрдВ рдмрдирд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдмрд╣рд┐рд╖реНрдХрд░рдг рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реВрдЪрдХрд╛рдВрдХ-рдкрд░рдд рдЧреБрдг рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:
name | pg_index_has_property ---------------+----------------------- clusterable | f index_scan | t bitmap_scan | t backward_scan | f
рдпрд╣рд╛рдВ рдЬреАрдПрд╕рдЯреА рд╕реЗ рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рдЕрд╕рдВрднрд╡ рд╣реИред
рдФрд░ рдЕрдВрддрддрдГ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрддрдВрдн-рдкрд░рдд рдЧреБрдг рд╣реИрдВ:
name | pg_index_column_has_property --------------------+------------------------------ asc | f desc | f nulls_first | f nulls_last | f orderable | f distance_orderable | f returnable | t search_array | f search_nulls | t
рдЫрдВрдЯрд╛рдИ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рдЬреЛ рдХрд┐ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╣реИред рдирд┐рдХрдЯрддрдо рдкрдбрд╝реЛрд╕рд┐рдпреЛрдВ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рджреВрд░реА рдСрдкрд░реЗрдЯрд░ рдПрд╕рдкреА-рдЬреАрдПрд╕рдЯреА рдореЗрдВ рдЕрдм рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рдирд┐рдХрд┐рддрд╛ Glukhov рджреНрд╡рд╛рд░рд╛ рдЖрдЧрд╛рдореА PostgreSQL 12, рдкреИрдЪ рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИред
SP-GiST рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЗрдВрдбреЗрдХреНрд╕-рд╕реНрдХреИрди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХрдо рд╕реЗ рдХрдо рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рдСрдкрд░реЗрдЯрд░ рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдПред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рджреЗрдЦрд╛ рд╣реИ, рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдЕрдиреБрдХреНрд░рдорд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрддреНрддреА рдХреЗ рдиреЛрдбреНрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдЕрдиреНрдп рдореЗрдВ, рдкреЗрдбрд╝ рдХреЗ рд╡рдВрд╢ рдХреЗ рджреМрд░рд╛рди рдорд╛рдиреЛрдВ рдХреЛ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
NULLs
рдЪрд┐рддреНрд░ рдХреЛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдЕрдм рддрдХ NULLs рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдпрд╣ рд╕реВрдЪрдХрд╛рдВрдХ рдЧреБрдгреЛрдВ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ NULLs рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рд╕рдЪ:
postgres=# explain (costs off) select * from sites where url is null;
QUERY PLAN ---------------------------------------------- Index Only Scan using sites_url_idx on sites Index Cond: (url IS NULL) (2 rows)
рд╣рд╛рд▓рд╛рдБрдХрд┐, NULL SP-GiST рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рджреЗрд╢реА рд╣реИред "рд╕реНрдкреЗрдЧрд┐рд╕реНрдЯ" рдСрдкрд░реЗрдЯрд░ рд╡рд░реНрдЧ рдХреЗ рд╕рднреА рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рд╕рдЦреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдПрдХ рдСрдкрд░реЗрдЯрд░ рдХреЛ NULL рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рднреА рдЙрд╕рдХрд╛ рдХреЛрдИ рднреА рдкреИрд░рд╛рдореАрдЯрд░ NULL рд╣реЛред рдпрд╣ рд╡рд┐рдзрд┐ рд╕реНрд╡рдпрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреА рд╣реИ: NULLs рдХреЗрд╡рд▓ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди рдЗрдВрдбреЗрдХреНрд╕-рдУрдирд▓реА рд╕реНрдХреИрди рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, NULLs рдХреЛ рд╡реИрд╕реЗ рднреА рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рд╡реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдкрдиреА рдЬрдбрд╝ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдкреЗрдбрд╝ рдореЗрдВред
рдЕрдиреНрдп рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░
рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдВрдХ рдФрд░ рдореВрд▓рд╛рдВрдХ рдХреЗ рдкреЗрдбрд╝ рдХреЗ рдЕрд▓рд╛рд╡рд╛, SP-GiST рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреЛ рднреА рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдХреНрдпреВрдПрд▓ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
- Box_ops рдСрдкрд░реЗрдЯрд░ рд╡рд░реНрдЧ рдЖрдпрддреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрддреБрд╖реНрдХреЛрдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рдЖрдпрдд рдХреЛ рдПрдХ рдЪрд╛рд░-рдЖрдпрд╛рдореА рд╕реНрдерд╛рди рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ , рдЗрд╕рд▓рд┐рдП рдХреНрд╡рд╛рдбрдВрдЯреЗрдВрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ 16 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛрддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ GiST рдХреЛ рд╣рд░рд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЖрдпрддреЛрдВ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЪреМрд░рд╛рд╣реЗ рд╣реЛрддреЗ рд╣реИрдВ: GiST рдореЗрдВ рд╕реАрдорд╛рдУрдВ рдХреЛ рдЦреАрдВрдЪрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рддрд╛рдХрд┐ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрдмрдХрд┐ рдЕрдВрдХ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЪрд╛рд░ рдЖрдпрд╛рдореА) рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЗ рдирд╣реАрдВ рд╣реИрдВред
- "Range_ops" рдСрдкрд░реЗрдЯрд░ рд╡рд░реНрдЧ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╡рд╛рдбрдЯреНрд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдЕрдВрддрд░рд╛рд▓ рдХреЛ рджреЛ-рдЖрдпрд╛рдореА рдмрд┐рдВрджреБ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ : рдирд┐рдЪрд▓реА рд╕реАрдорд╛ рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдмрди рдЬрд╛рддреА рд╣реИ, рдФрд░ рдКрдкрд░реА рд╕реАрдорд╛ рд╕рдордиреНрд╡рдп рдмрди рдЬрд╛рддреА рд╣реИред
рдкрд░ рдкрдврд╝реЗрдВ ред