36.15. ÐнÑоÑмаÑÐ¸Ñ Ð´Ð»Ñ Ð¾Ð¿ÑимизаÑии опеÑаÑоÑов
ÐпÑеделение опеÑаÑоÑа в Postgres Pro Ð¼Ð¾Ð¶ÐµÑ Ð²ÐºÐ»ÑÑаÑÑ ÑазлиÑнÑе дополниÑелÑнÑе пÑедложениÑ, коÑоÑÑе ÑообÑаÑÑ ÑиÑÑеме полезнÑе ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ поведении опеÑаÑоÑа. СÑаÑайÑеÑÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑ ÑÑи пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¿Ñи возможноÑÑи, Ñак как они могÑÑ Ð·Ð½Ð°ÑиÑелÑно ÑÑкоÑиÑÑ Ð²Ñполнение запÑоÑов, иÑполÑзÑÑÑÐ¸Ñ Ð´Ð°Ð½Ð½Ñй опеÑаÑоÑ. Ðо еÑли Ð²Ñ Ð·Ð°Ð´Ð°ÑÑе Ð¸Ñ , ÑбедиÑеÑÑ, ÑÑо они коÑÑекÑнÑ! ÐепÑавилÑное пÑименение пÑедложений опÑимизаÑии Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к Ð·Ð°Ð¼ÐµÐ´Ð»ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов, неоÑевиднÑм оÑибоÑнÑм ÑезÑлÑÑаÑам и дÑÑгим непÑиÑÑноÑÑÑм. ÐÑли Ð²Ñ Ð½Ðµ ÑвеÑÐµÐ½Ñ Ð² пÑавилÑноÑÑи пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð¿ÑимизаÑии, лÑÑÑе вовÑе не иÑполÑзоваÑÑ ÐµÐ³Ð¾; единÑÑвеннÑм поÑледÑÑвием бÑÐ´ÐµÑ Ñо, ÑÑо запÑоÑÑ Ð±ÑдÑÑ ÑабоÑаÑÑ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½ÐµÐµ, Ñем могли бÑ.
РбÑдÑÑÐ¸Ñ Ð²ÐµÑÑиÑÑ Postgres Pro могÑÑ Ð±ÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ Ð¸ дÑÑгие пÑедложениÑ. ÐдеÑÑ Ð¾Ð¿Ð¸ÑÑваÑÑÑÑ Ñе, ÑÑо поддеÑживаÑÑÑÑ Ð²ÐµÑÑией 13.23.1.
Также Ð´Ð»Ñ ÑÑнкÑии, ÑеализÑÑÑей опеÑаÑоÑ, имееÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð²ÑпомогаÑелÑнÑÑ ÑÑнкÑÐ¸Ñ Ð´Ð»Ñ Ð¿Ð»Ð°Ð½Ð¸ÑовÑика, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð¿ÐµÑедаваÑÑ Ð´ÑÑгÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ поведении опеÑаÑоÑа. Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº РазделÑ 36.11.
36.15.1. COMMUTATOR
ÐÑедложение COMMUTATOR, еÑли пÑедÑÑавлено, задаÑÑ Ð¾Ð¿ÐµÑаÑоÑ, коммÑÑиÑÑÑÑий Ð´Ð»Ñ Ð¾Ð¿ÑеделÑемого. ÐпеÑаÑÐ¾Ñ A ÑвлÑеÑÑÑ ÐºÐ¾Ð¼Ð¼ÑÑиÑÑÑÑим Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑа B, еÑли (x A y) ÑавнÑеÑÑÑ (y B x) Ð´Ð»Ñ Ð²ÑеÑ
возможнÑÑ
знаÑений x, y. ÐамеÑÑÑе, ÑÑо B Ñакже бÑÐ´ÐµÑ ÐºÐ¾Ð¼Ð¼ÑÑиÑÑÑÑим Ð´Ð»Ñ A. ÐапÑимеÑ, опеÑаÑоÑÑ < и > Ð´Ð»Ñ ÐºÐ¾Ð½ÐºÑеÑного Ñипа даннÑÑ
обÑÑно ÑвлÑÑÑÑÑ ÐºÐ¾Ð¼Ð¼ÑÑиÑÑÑÑими дÑÑг Ð´Ð»Ñ Ð´ÑÑга, а опеÑаÑÐ¾Ñ + â коммÑÑиÑÑÑÑий Ð´Ð»Ñ ÑебÑ. Ðо ÑÑадиÑионнÑй опеÑаÑÐ¾Ñ - коммÑÑиÑÑÑÑего не имееÑ.
Тип левого опеÑанда опеÑаÑоÑа должен ÑовпадаÑÑ Ñ Ñипом пÑавого опеÑанда коммÑÑиÑÑÑÑего Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ опеÑаÑоÑа, и наобоÑоÑ. ÐоÑÑÐ¾Ð¼Ñ Ð¸Ð¼Ñ ÐºÐ¾Ð¼Ð¼ÑÑиÑÑÑÑего опеÑаÑоÑа â ÑÑо вÑÑ, ÑÑо Postgres Pro должен знаÑÑ, ÑÑÐ¾Ð±Ñ Ð½Ð°Ð¹Ñи коммÑÑаÑоÑ, и вÑÑ, ÑÑо нÑжно ÑказаÑÑ Ð² пÑедложении COMMUTATOR.
ÐнÑоÑмаÑÐ¸Ñ Ð¾ коммÑÑиÑÑÑÑиÑ
опеÑаÑоÑаÑ
кÑайне важна Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑов, коÑоÑÑе бÑдÑÑ Ð¿ÑименÑÑÑÑÑ Ð² индекÑаÑ
и ÑÑловиÑÑ
ÑоединениÑ, Ñак как, иÑполÑзÑÑ ÐµÑ, опÑимизаÑÐ¾Ñ Ð·Ð°Ð¿ÑоÑов Ð¼Ð¾Ð¶ÐµÑ Â«Ð¿ÐµÑевоÑаÑиваÑÑ» Ñакие вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸ полÑÑаÑÑ ÑоÑмÑ, необÑ
одимÑе Ð´Ð»Ñ ÑазнÑÑ
Ñипов планов. ÐапÑимеÑ, ÑаÑÑмоÑÑим запÑÐ¾Ñ Ñ Ð¿Ñедложением WHERE tab1.x = tab2.y, где tab1.x и tab2.y имеÑÑ Ð¿Ð¾Ð»ÑзоваÑелÑÑкий Ñип, и пÑедположим, ÑÑо Ñ Ð½Ð°Ñ ÐµÑÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾ ÑÑолбÑÑ tab2.y. ÐпÑимизаÑÐ¾Ñ ÑÐ¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð´ÐµÐ¹ÑÑвоваÑÑ ÑканиÑование по индекÑÑ, ÑолÑко еÑли ÐµÐ¼Ñ ÑдаÑÑÑÑ Ð¿ÐµÑевеÑнÑÑÑ Ð²ÑÑажение tab2.y = tab1.x, Ñак как меÑ
анизм ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ индекÑÑ Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ, ÑÑо индекÑиÑÑемÑй ÑÑÐ¾Ð»Ð±ÐµÑ Ð½Ð°Ñ
одиÑÑÑ Ñлева Ð¾Ñ Ð¾Ð¿ÐµÑаÑоÑа. Postgres Pro Ñам по Ñебе не бÑÐ´ÐµÑ Ð¿Ð¾Ð»Ð°Ð³Ð°ÑÑ, ÑÑо Ñакое пÑеобÑазование возможно â ÑÑо должен опÑеделиÑÑ ÑоздаÑÐµÐ»Ñ Ð¾Ð¿ÐµÑаÑоÑа =, добавив инÑоÑмаÑÐ¸Ñ Ð¾ коммÑÑиÑÑÑÑем опеÑаÑоÑе.
Ðогда Ð²Ñ Ð¾Ð¿ÑеделÑеÑе опеÑаÑоÑ, коммÑÑиÑÑÑÑий Ñам Ð´Ð»Ñ ÑебÑ, Ð²Ñ Ð´ÐµÐ»Ð°ÐµÑе именно ÑÑо. ÐÑли же Ð²Ñ Ð¾Ð¿ÑеделÑеÑе паÑÑ ÐºÐ¾Ð¼Ð¼ÑÑиÑÑÑÑÐ¸Ñ Ð¾Ð¿ÐµÑаÑоÑов, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ°ÐµÑ Ð½ÐµÐ±Ð¾Ð»ÑÑое заÑÑÑднение: как опеÑаÑоÑ, опÑеделÑемÑй пеÑвÑм, Ð¼Ð¾Ð¶ÐµÑ ÑÑÑлаÑÑÑÑ Ð½Ð° дÑÑгой, еÑÑ Ð½Ðµ опÑеделÑннÑй? ÐÑÑÑ Ð´Ð²Ð° ÑеÑÐµÐ½Ð¸Ñ ÑÑой пÑоблемÑ:
Ðо-пеÑвÑÑ , можно опÑÑÑиÑÑ Ð¿Ñедложение
COMMUTATORÐ´Ð»Ñ Ð¿ÐµÑвого опеÑаÑоÑа, коÑоÑÑй Ð²Ñ Ð¾Ð¿ÑеделÑеÑе, а заÑем добавиÑÑ ÐµÐ³Ð¾ в опÑеделении вÑоÑого. Так как Postgres Pro знаеÑ, ÑÑо коммÑÑиÑÑÑÑие опеÑаÑоÑÑ ÑвÑÐ·Ð°Ð½Ñ Ð¿Ð°Ñами, вÑÑÑеÑÐ°Ñ Ð²ÑоÑое опÑеделение, он авÑомаÑиÑеÑки возвÑаÑаеÑÑÑ Ðº пеÑÐ²Ð¾Ð¼Ñ Ð¸ добавлÑÐµÑ Ð² него недоÑÑаÑÑее пÑедложениеCOMMUTATOR.Ðо-вÑоÑÑÑ , можно добавиÑÑ Ð¿Ñедложение
COMMUTATORв оба опÑеделениÑ. Ðогда Postgres Pro обÑабаÑÑÐ²Ð°ÐµÑ Ð¿ÐµÑвое опÑеделение и видиÑ, ÑÑоCOMMUTATORÑÑÑлаеÑÑÑ Ð½Ð° неÑÑÑеÑÑвÑÑÑий опеÑаÑоÑ, в ÑиÑÑемном каÑалоге ÑоздаÑÑÑÑ ÑикÑÐ¸Ð²Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ Ð´Ð»Ñ ÑÑого опеÑаÑоÑа. Ð ÑÑой ÑикÑивной запиÑи акÑÑалÑÐ½Ñ Ð±ÑдÑÑ ÑолÑко Ð¸Ð¼Ñ Ð¾Ð¿ÐµÑаÑоÑа, ÑÐ¸Ð¿Ñ Ð»ÐµÐ²Ð¾Ð³Ð¾ и пÑавого опеÑандов, а Ñакже Ñип ÑезÑлÑÑаÑа, Ñак как ÑÑо вÑÑ, ÑÑо Postgres Pro Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð¿ÑеделиÑÑ Ð² ÑÑÐ¾Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ. ÐапиÑÑ Ð¿ÐµÑвого опеÑаÑоÑа бÑÐ´ÐµÑ ÑвÑзана Ñ ÑÑой ÑикÑивной запиÑÑÑ. ÐаÑем, когда Ð²Ñ Ð¾Ð¿ÑеделиÑе вÑоÑой опеÑаÑоÑ, ÑиÑÑема внеÑÑÑ Ð² ÑÑÑ ÑикÑивнÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¸Ð· вÑоÑого опÑеделениÑ. ÐÑли Ð²Ñ Ð¿Ð¾Ð¿ÑÑаеÑеÑÑ Ð¿ÑимениÑÑ ÑикÑивнÑй опеÑаÑоÑ, пÑежде Ñем он бÑÐ´ÐµÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð¾Ð¿ÑеделÑн, Ð²Ñ Ð¿ÑоÑÑо полÑÑиÑе ÑообÑение об оÑибке.
36.15.2. NEGATOR
ÐÑедложение NEGATOR, еÑли пÑиÑÑÑÑÑвÑеÑ, задаÑÑ Ð¾Ð¿ÐµÑаÑоÑ, обÑаÑнÑй к опÑеделÑемомÑ. ÐпеÑаÑÐ¾Ñ A ÑвлÑеÑÑÑ Ð¾Ð±ÑаÑнÑм к опеÑаÑоÑÑ B, еÑли они оба возвÑаÑаÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкий ÑезÑлÑÑÐ°Ñ Ð¸ (x A y) ÑавнÑеÑÑÑ NOT (x B y) Ð´Ð»Ñ Ð²ÑеÑ
возможнÑÑ
x, y. ÐамеÑÑÑе, ÑÑо B Ñак же ÑвлÑеÑÑÑ Ð¾Ð±ÑаÑнÑм к A. ÐапÑимеÑ, опеÑаÑоÑÑ < и >= ÑоÑÑавлÑÑÑ Ð¿Ð°ÑÑ Ð¾Ð±ÑаÑнÑÑ
дÑÑг к дÑÑÐ³Ñ Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑинÑÑва Ñипов даннÑÑ
. Ðикакой опеÑаÑÐ¾Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð±ÑаÑнÑм к Ñебе же.
РоÑлиÑие Ð¾Ñ ÐºÐ¾Ð¼Ð¼ÑÑиÑÑÑÑÐ¸Ñ Ð¾Ð¿ÐµÑаÑоÑов, два ÑнаÑнÑÑ Ð¾Ð¿ÐµÑаÑоÑа вполне могÑÑ Ð±ÑÑÑ Ð¾Ð±ÑаÑнÑми к дÑÑг дÑÑгÑ; ÑÑо бÑÐ´ÐµÑ Ð¾Ð·Ð½Ð°ÑаÑÑ, ÑÑо (A x) ÑавнÑеÑÑÑ NOT (B x) Ð´Ð»Ñ Ð²ÑÐµÑ x (и Ð´Ð»Ñ Ð¿ÑавÑÑ ÑнаÑнÑÑ Ð¾Ð¿ÐµÑаÑоÑов аналогиÑно).
У опеÑаÑоÑа, обÑаÑного данномÑ, ÑÐ¸Ð¿Ñ Ð»ÐµÐ²Ð¾Ð³Ð¾ и/или пÑавого опеÑанда Ð´Ð¾Ð»Ð¶Ð½Ñ ÑооÑвеÑÑÑвоваÑÑ Ñипам данного опеÑаÑоÑа, Ñак же как и Ñ Ð¿Ñедложением COMMUTATOR; оÑлиÑие ÑолÑко в Ñом, ÑÑо Ð¸Ð¼Ñ Ð¾Ð¿ÐµÑаÑоÑа задаÑÑÑÑ Ð² пÑедложении NEGATOR.
Указание обÑаÑного опеÑаÑоÑа оÑÐµÐ½Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾ Ð´Ð»Ñ Ð¾Ð¿ÑимизаÑоÑа запÑоÑов, Ñак как ÑÑо позволÑÐµÑ ÑпÑоÑÑиÑÑ Ð²ÑÑажение вида NOT (x = y) до x <> y. Такие вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð½Ðµ Ñак Ñедки, как Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ, Ñак как опеÑаÑии NOT могÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑÑÑ Ð°Ð²ÑомаÑиÑеÑки в ÑезÑлÑÑаÑе ÑеоÑганизаÑий вÑÑажений.
ÐаÑÑ Ð¾Ð±ÑаÑнÑÑ Ð¾Ð¿ÐµÑаÑоÑов можно опÑеделиÑÑ Ñеми же ÑпоÑобами, ÑÑо бÑли опиÑÐ°Ð½Ñ Ñанее Ð´Ð»Ñ Ð¿Ð°ÑÑ ÐºÐ¾Ð¼Ð¼ÑÑиÑÑÑÑÐ¸Ñ .
36.15.3. RESTRICT
ÐÑедложение RESTRICT, еÑли пÑедÑÑавлено, опÑеделÑÐµÑ ÑÑнкÑÐ¸Ñ Ð¾Ñенки избиÑаÑелÑноÑÑи огÑаниÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑа. (ÐамеÑÑÑе, ÑÑо в нÑм задаÑÑÑÑ Ð¸Ð¼Ñ ÑÑнкÑии, а не опеÑаÑоÑа.) ÐÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ RESTRICT имеÑÑ ÑмÑÑл ÑолÑко Ð´Ð»Ñ Ð±Ð¸Ð½Ð°ÑнÑÑ
опеÑаÑоÑов, возвÑаÑаÑÑиÑ
boolean. ÐÐ´ÐµÑ Ð¾Ñенки избиÑаÑелÑноÑÑи огÑаниÑÐµÐ½Ð¸Ñ Ð·Ð°ÐºÐ»ÑÑаеÑÑÑ Ð² Ñом, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ, какой пÑоÑÐµÐ½Ñ ÑÑÑок в ÑаблиÑе бÑÐ´ÐµÑ ÑдовлеÑвоÑÑÑÑ ÑÑÐ»Ð¾Ð²Ð¸Ñ WHERE вида:
column OP constant
Ð´Ð»Ñ ÑекÑÑего опеÑаÑоÑа и опÑеделÑнного знаÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð½ÑÑанÑÑ. ÐÑо Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ Ð¾Ð¿ÑимизаÑоÑÑ Ð¿ÑимеÑно опÑеделиÑÑ, ÑколÑко ÑÑÑок бÑÐ´ÐµÑ Ð¸ÑклÑÑено пÑедложениÑми WHERE Ñакого вида. (ÐЫ ÑпÑоÑиÑе, а ÑÑо еÑли конÑÑанÑа наÑ
одиÑÑÑ Ñлева? ÐÑ, ÑобÑÑвенно Ð´Ð»Ñ ÑакиÑ
ÑлÑÑаев и задаÑÑÑÑ COMMUTATOR...)
Рамки данной Ð³Ð»Ð°Ð²Ñ Ð½Ðµ позволÑÑÑ Ð¾Ð¿Ð¸ÑаÑÑ ÑазÑабоÑÐºÑ Ð½Ð¾Ð²ÑÑ ÑÑнкÑий оÑенки избиÑаÑелÑноÑÑи огÑаниÑениÑ, но обÑÑно можно иÑполÑзоваÑÑ Ð¾Ð´Ð¸Ð½ из ÑÑандаÑÑнÑÑ ÑиÑÑемнÑÑ Ð¾ÑенÑиков Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑинÑÑва дополниÑелÑнÑÑ Ð¾Ð¿ÐµÑаÑоÑов. СÑандаÑÑнÑе оÑенÑики огÑаниÑений ÑледÑÑÑие:
eqsel Ð´Ð»Ñ = |
neqsel Ð´Ð»Ñ <> |
scalarltsel Ð´Ð»Ñ < |
scalarlesel Ð´Ð»Ñ <= |
scalargtsel Ð´Ð»Ñ > |
scalargesel Ð´Ð»Ñ >= |
ЧаÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе обойÑиÑÑ ÑÑнкÑиÑми eqsel и neqsel Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑов Ñ Ð¾ÑÐµÐ½Ñ Ð²ÑÑокой или низкой избиÑаÑелÑноÑÑÑÑ, даже еÑли ÑÑо не опеÑаÑоÑÑ ÑобÑÑвенно ÑавенÑÑва или неÑавенÑÑва. ÐапÑимеÑ, геомеÑÑиÑеÑкие опеÑаÑоÑÑ Ð¿ÑиблизиÑелÑного ÑавенÑÑва иÑполÑзÑÑÑ eqsel в пÑедположении, ÑÑо ÑооÑвеÑÑÑвÑÑÑие (ÑавнÑе) ÑлеменÑÑ Ð±ÑдÑÑ ÑоÑÑавлÑÑÑ ÑолÑко неболÑÑой пÑоÑÐµÐ½Ñ Ð¾Ñ Ð²ÑеÑ
запиÑей ÑаблиÑÑ.
ФÑнкÑии scalarltsel, scalarlesel, scalargtsel и scalargesel можно иÑполÑзоваÑÑ Ð´Ð»Ñ ÑÑавнений Ñ Ñипами даннÑÑ
, коÑоÑÑе могÑÑ Ð±ÑÑÑ ÐºÐ°ÐºÐ¸Ð¼-либо оÑмÑÑленнÑм обÑазом пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ñ Ð² ÑиÑловÑе ÑкалÑÑнÑе знаÑÐµÐ½Ð¸Ñ Ð´Ð»Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð¾Ð².
ÐÑÑÑ ÐµÑÑ Ð¾Ð´Ð½Ð° Ð¿Ð¾Ð»ÐµÐ·Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð¾Ñенки избиÑаÑелÑноÑÑи, matchingsel, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ ÑабоÑаÑÑ Ð¿ÑакÑиÑеÑки Ñ Ð»ÑбÑм бинаÑнÑм опеÑаÑоÑом, еÑли Ð´Ð»Ñ ÐµÐ³Ð¾ вÑ
однÑÑ
Ñипов даннÑÑ
ÑобиÑаеÑÑÑ ÑÑаÑиÑÑика MCV и/или ÑÑÑоиÑÑÑ Ð³Ð¸ÑÑогÑамма. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑа оÑенка в два Ñаза болÑÑе Ñой, ÑÑо вÑдаÑÑ eqsel, Ñаким обÑазом, Ð´Ð°Ð½Ð½Ð°Ñ ÑÑнкÑÐ¸Ñ Ð½Ð°Ð¸Ð±Ð¾Ð»ÐµÐµ полезна Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑов ÑÑавнениÑ, более избиÑаÑелÑнÑÑ
, Ñем опеÑаÑÐ¾Ñ ÑавенÑÑва. (Также можно вÑзваÑÑ Ð½Ð¸Ð¶ÐµÐ»ÐµÐ¶Ð°ÑÑÑ ÑÑнкÑÐ¸Ñ generic_restriction_selectivity, пеÑедав ей дÑÑгÑÑ Ð¾ÑÐµÐ½ÐºÑ Ð¿Ð¾ ÑмолÑаниÑ.)
36.15.4. JOIN
ÐÑедложение JOIN, еÑли пÑедÑÑавлено, опÑеделÑÐµÑ ÑÑнкÑÐ¸Ñ Ð¾Ñенки избиÑаÑелÑноÑÑи ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑа. (ÐамеÑÑÑе, ÑÑо в нÑм задаÑÑÑÑ Ð¸Ð¼Ñ ÑÑнкÑии, а не опеÑаÑоÑа.) ÐÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ JOIN имеÑÑ ÑмÑÑл ÑолÑко Ð´Ð»Ñ Ð±Ð¸Ð½Ð°ÑнÑÑ
опеÑаÑоÑов, возвÑаÑаÑÑиÑ
boolean. ÐÐ´ÐµÑ Ð¾Ñенки избиÑаÑелÑноÑÑи ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð·Ð°ÐºÐ»ÑÑаеÑÑÑ Ð² Ñом, ÑÑÐ¾Ð±Ñ ÑгадаÑÑ, какой пÑоÑÐµÐ½Ñ ÑÑÑок в паÑе ÑÐ°Ð±Ð»Ð¸Ñ Ð±ÑÐ´ÐµÑ ÑдовлеÑвоÑÑÑÑ ÑÑÐ»Ð¾Ð²Ð¸Ñ WHERE ÑледÑÑÑего вида:
table1.column1 OP table2.column2
Ð´Ð»Ñ ÑекÑÑего опеÑаÑоÑа. Ðак и RESTRICT, ÑÑо пÑедложение оÑÐµÐ½Ñ Ð¿Ð¾Ð¼Ð¾Ð³Ð°ÐµÑ Ð¾Ð¿ÑимизаÑоÑÑ, позволÑÑ ÐµÐ¼Ñ Ð²ÑÑÑниÑÑ, какой из возможнÑÑ
ваÑианÑов ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑкоÑее вÑего окажеÑÑÑ Ð²Ñгоднее.
Ðак и Ñанее, в ÑÑой главе Ð¼Ñ Ð½Ðµ бÑдем пÑÑаÑÑÑÑ ÑаÑÑказаÑÑ, как напиÑаÑÑ ÑÑнкÑÐ¸Ñ Ð¾ÑÐµÐ½Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸Ð·Ð±Ð¸ÑаÑелÑноÑÑи ÑоединениÑ, а пÑоÑÑо оÑмеÑим, ÑÑо Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе иÑполÑзоваÑÑ Ð¾Ð´Ð¸Ð½ из Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑÐ¸Ñ ÑÑандаÑÑнÑÑ Ð¾ÑенÑиков:
eqjoinsel Ð´Ð»Ñ = |
neqjoinsel Ð´Ð»Ñ <> |
scalarltjoinsel Ð´Ð»Ñ < |
scalarlejoinsel Ð´Ð»Ñ <= |
scalargtjoinsel Ð´Ð»Ñ > |
scalargejoinsel Ð´Ð»Ñ >= |
matchingjoinsel Ð´Ð»Ñ ÑиповÑÑ
опеÑаÑоÑов ÑопоÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ |
areajoinsel Ð´Ð»Ñ ÑÑавнений облаÑÑей в плоÑкоÑÑи |
positionjoinsel Ð´Ð»Ñ ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹ в плоÑкоÑÑи |
contjoinsel Ð´Ð»Ñ Ð¿ÑовеÑки на вклÑÑение в плоÑкоÑÑи |
36.15.5. HASHES
ÐÑедложение HASHES, еÑли пÑиÑÑÑÑÑвÑеÑ, говоÑÐ¸Ñ ÑиÑÑеме, ÑÑо Ð´Ð»Ñ Ñоединений Ñ Ð¿Ñименением ÑÑого опеÑаÑоÑа допÑÑÑимо иÑполÑзоваÑÑ Ð¼ÐµÑод ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ Ñ
еÑÑ. HASHES Ð¸Ð¼ÐµÐµÑ ÑмÑÑл ÑолÑко Ð´Ð»Ñ Ð±Ð¸Ð½Ð°Ñного опеÑаÑоÑа, коÑоÑÑй возвÑаÑÐ°ÐµÑ boolean, и на пÑакÑике ÑÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ вÑÑажаÑÑ ÑавенÑÑво знаÑений некоÑоÑого Ñипа даннÑÑ
или паÑÑ Ñипов даннÑÑ
.
Соединение по Ñ
еÑÑ Ð±Ð°Ð·Ð¸ÑÑеÑÑÑ Ð½Ð° Ñом пÑедположении, ÑÑо опеÑаÑÐ¾Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð²Ð¾Ð·Ð²ÑаÑÐ°ÐµÑ Ð¸ÑÑÐ¸Ð½Ñ ÑолÑко Ð´Ð»Ñ ÑакиÑ
Ð¿Ð°Ñ Ð·Ð½Ð°Ñений Ñлева и ÑпÑава, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ
полÑÑаеÑÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñй Ñ
еÑ. ÐÑли два знаÑÐµÐ½Ð¸Ñ Ð¾ÐºÐ°Ð·ÑваÑÑÑÑ Ð² ÑазнÑÑ
ÑÑейкаÑ
Ñ
еÑа, опеÑаÑÐ¸Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð° не бÑÐ´ÐµÑ ÑÑавниваÑÑ Ð¸Ñ
, неÑвно подÑазÑмеваÑ, ÑÑо ÑезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑоÑа ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð² ÑÑом ÑлÑÑае должен бÑÑÑ Ð»Ð¾Ð¶Ð½Ñм. ÐоÑÑÐ¾Ð¼Ñ Ð½Ðµ Ð¸Ð¼ÐµÐµÑ Ð½Ð¸ÐºÐ°ÐºÐ¾Ð³Ð¾ ÑмÑÑла ÑказÑваÑÑ HASHES Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑов, коÑоÑÑе не пÑедÑÑавлÑÑÑ ÐºÐ°ÐºÑÑ-лÑбо ÑоÑÐ¼Ñ ÑавенÑÑва. РболÑÑинÑÑве ÑлÑÑаев пÑакÑиÑеÑкий ÑмÑÑл в поддеÑжке Ñ
еÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÐµÑÑÑ ÑолÑко Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑов, пÑинимаÑÑиÑ
один Ñип даннÑÑ
Ñ Ð¾Ð±ÐµÐ¸Ñ
ÑÑоÑон. Ðднако иногда возможно ÑазÑабоÑаÑÑ Ñ
еÑ-ÑÑнкÑии, ÑовмеÑÑимÑе ÑÑÐ°Ð·Ñ Ñ Ð½ÐµÑколÑкими Ñипами даннÑÑ
; Ñо еÑÑÑ, ÑÑнкÑии, коÑоÑÑе бÑдÑÑ Ð²ÑдаваÑÑ Ð¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñе Ñ
еÑ-ÐºÐ¾Ð´Ñ Ð´Ð»Ñ Â«ÑавнÑÑ
» знаÑений, неÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо ÑÑи знаÑÐµÐ½Ð¸Ñ Ð±ÑдÑÑ Ð¿ÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð¿Ð¾-ÑазномÑ. ÐапÑимеÑ, доволÑно легко ÑÑнкÑии Ñ Ñакой оÑобенноÑÑÑÑ ÑеализÑÑÑÑÑ Ð´Ð»Ñ Ñ
еÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑелÑÑ
ÑиÑел ÑазлиÑного ÑазмеÑа.
ЧÑÐ¾Ð±Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸Ð¼ÐµÐ» Ñ
аÑакÑеÑиÑÑÐ¸ÐºÑ HASHES, он должен вÑ
одиÑÑ Ð² ÑемейÑÑво опеÑаÑоÑов индекÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ Ñ
еÑÑ. ÐÑо ÑÑебование оÑкладÑваеÑÑÑ, когда опеÑаÑÐ¾Ñ ÑолÑко ÑоздаÑÑÑÑ, Ð²ÐµÐ´Ñ Ð½Ñжное ÑемейÑÑво опеÑаÑоÑов, ÑазÑмееÑÑÑ, еÑÑ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ ÑÑÑеÑÑвоваÑÑ. Ðо пÑи попÑÑке иÑполÑзоваÑÑ Ñакой опеÑаÑÐ¾Ñ Ð´Ð»Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ Ñ
еÑÑ, Ð²Ð¾Ð·Ð½Ð¸ÐºÐ½ÐµÑ Ð¾Ñибка во вÑÐµÐ¼Ñ Ð²ÑполнениÑ, еÑли Ñакого ÑемейÑÑва не окажеÑÑÑ. СиÑÑеме необÑ
одимо знаÑÑ ÑемейÑÑво опеÑаÑоÑов, ÑÑÐ¾Ð±Ñ Ð½Ð°Ð¹Ñи ÑÑнкÑии Ð´Ð»Ñ Ñ
еÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñипа(ов) вÑ
однÑÑ
даннÑÑ
опеÑаÑоÑа. ÐонеÑно, Ð²Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ñакже опÑеделиÑÑ Ð¿Ð¾Ð´Ñ
одÑÑие ÑÑнкÑии Ñ
еÑиÑованиÑ, пÑежде Ñем ÑможеÑе ÑоздаÑÑ ÑемейÑÑво опеÑаÑоÑов.
ÐÑи подгоÑовке ÑÑнкÑии Ñ
еÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð±ÑзаÑелÑно позабоÑÑÑеÑÑ Ð¾ Ñом, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð° вÑегда вÑдавала нÑжнÑй ÑезÑлÑÑаÑ, вне завиÑимоÑÑи Ð¾Ñ Ð¾ÑобенноÑÑей маÑинной аÑÑ
иÑекÑÑÑÑ. ÐапÑимеÑ, еÑли Ð²Ð°Ñ Ñип даннÑÑ
пÑедÑÑавлен в ÑÑÑÑкÑÑÑе, в коÑоÑой еÑÑÑ Ð½ÐµÐ·Ð½Ð°ÑаÑие дополнÑÑÑие биÑÑ, нелÑÐ·Ñ Ð¿ÑоÑÑо пеÑедаÑÑ Ð²ÑÑ ÑÑÑÑкÑÑÑÑ ÑÑнкÑии hash_any. (ÐÑо возможно, ÑолÑко еÑли вÑе ваÑи опеÑаÑоÑÑ Ð¸ ÑÑнкÑии гаÑанÑиÑованно оÑиÑаÑÑ Ð½ÐµÐ·Ð½Ð°ÑаÑие биÑÑ, ÑÑо ÑвлÑеÑÑÑ ÑекомендÑемой ÑÑÑаÑегией.) РкаÑеÑÑве дÑÑгого пÑимеÑа можно пÑивеÑÑи ÑÐ¸Ð¿Ñ Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой в ÑÑандаÑÑе IEEE, в коÑоÑÑÑ
оÑÑиÑаÑелÑнÑй Ð½Ð¾Ð»Ñ Ð¸ положиÑелÑнÑй Ð½Ð¾Ð»Ñ â ÑазлиÑнÑе знаÑÐµÐ½Ð¸Ñ (оÑлиÑаÑÑÑÑ Ð½Ð° ÑÑовне биÑов), но пÑи ÑÑавнении они ÑÑиÑаÑÑÑÑ ÑавнÑми. ÐÑли знаÑение Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей ÑоÑкой Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð¾ÑÑиÑаÑелÑнÑй нолÑ, ÑÑебÑÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе дейÑÑвиÑ, ÑÑÐ¾Ð±Ñ Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ вÑдавалÑÑ ÑÐ¾Ñ Ð¶Ðµ Ñ
еÑ, ÑÑо и Ð´Ð»Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑного нÑлÑ.
ÐпеÑаÑÐ¾Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ Ñ ÐµÑÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ имеÑÑ ÐºÐ¾Ð¼Ð¼ÑÑиÑÑÑÑий (ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÐ¾Ñ Ð¶Ðµ опеÑаÑоÑ, еÑли Ñ Ð½ÐµÐ³Ð¾ два опеÑанда одного Ñипа, либо ÑвÑзаннÑй опеÑаÑÐ¾Ñ ÑавенÑÑва, в пÑоÑивном ÑлÑÑае), оÑноÑÑÑийÑÑ Ðº ÑÐ¾Ð¼Ñ Ð¶Ðµ ÑемейÑÑÐ²Ñ Ð¾Ð¿ÐµÑаÑоÑов. Ð ÑлÑÑае его оÑÑÑÑÑÑвиÑ, пÑи попÑÑке иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ Ð¾Ñибки планиÑовÑика. Также желаÑелÑно (Ñ Ð¾ÑÑ ÑÑо ÑÑÑого не ÑÑебÑеÑÑÑ), ÑÑÐ¾Ð±Ñ Ð² ÑемейÑÑве опеÑаÑоÑов Ñ ÐµÑиÑованиÑ, поддеÑживаÑÑем неÑколÑко Ñипов даннÑÑ , опÑеделÑлиÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ ÑавенÑÑва Ð´Ð»Ñ Ð²ÑÐµÑ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñий ÑÑÐ¸Ñ Ñипов даннÑÑ ; ÑÑо ÑпоÑобÑÑвÑÐµÑ Ð»ÑÑÑей опÑимизаÑии.
ÐÑимеÑание
ФÑнкÑиÑ, ÑеализÑÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ Ñ ÐµÑÑ, должна бÑÑÑ Ð¿Ð¾ÑÑоÑнной (IMMUTABLE) или ÑÑабилÑной (STABLE). ÐÑли ÑÑа ÑÑнкÑÐ¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÑÐ¸Ð²Ð°Ñ (VOLATILE), ÑиÑÑема никогда не бÑÐ´ÐµÑ Ð¿ÑименÑÑÑ ÑÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð´Ð»Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ Ñ ÐµÑÑ.
ÐÑимеÑание
ÐÑли опеÑаÑÐ¾Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ Ñ
еÑÑ ÑеализÑеÑÑÑ ÑÑÑогой ÑÑнкÑией (STRICT), ÑÑа ÑÑнкÑÐ¸Ñ Ñакже должна бÑÑÑ Ð¿Ð¾Ð»Ð½Ð¾Ð¹: Ñо еÑÑÑ Ð¾Ð½Ð° должна возвÑаÑаÑÑ true или false, но не NULL, Ð´Ð»Ñ Ð»ÑбÑÑ
двÑÑ
аÑгÑменÑов, оÑлиÑнÑÑ
Ð¾Ñ NULL. ÐÑли ÑÑо пÑавило не ÑоблÑдаеÑÑÑ, опÑимизаÑÐ¸Ñ Ð¾Ð¿ÐµÑаÑий IN Ñ Ñ
еÑем Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑиводиÑÑ Ðº невеÑнÑм ÑезÑлÑÑаÑам. (Ð ÑаÑÑноÑÑи, вÑÑажение IN Ð¼Ð¾Ð¶ÐµÑ Ð²ÐµÑнÑÑÑ false, когда пÑавилÑнÑм оÑвеÑом, ÑоглаÑно ÑÑандаÑÑÑ, должен бÑÑÑ NULL, либо вÑдаÑÑ Ð¾ÑÐ¸Ð±ÐºÑ Ñ ÑообÑением о Ñом, ÑÑо оно не гоÑов к ÑезÑлÑÑаÑÑ NULL.)
36.15.6. MERGES
ÐÑедложение MERGES, еÑли пÑиÑÑÑÑÑвÑеÑ, говоÑÐ¸Ñ ÑиÑÑеме, ÑÑо Ð´Ð»Ñ Ñоединений Ñ Ð¿Ñименением ÑÑого опеÑаÑоÑа допÑÑÑимо иÑполÑзоваÑÑ Ð¼ÐµÑод ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑлиÑнием. MERGES Ð¸Ð¼ÐµÐµÑ ÑмÑÑл ÑолÑко Ð´Ð»Ñ Ð±Ð¸Ð½Ð°Ñного опеÑаÑоÑа, коÑоÑÑй возвÑаÑÐ°ÐµÑ boolean, и на пÑакÑике ÑÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ вÑÑажаÑÑ ÑавенÑÑво знаÑений некоÑоÑого Ñипа даннÑÑ
или паÑÑ Ñипов даннÑÑ
.
ÐÐ´ÐµÑ Ð¾Ð±ÑÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑлиÑнием заклÑÑаеÑÑÑ Ð² ÑпоÑÑдоÑивании ÑÐ°Ð±Ð»Ð¸Ñ Ñлева и ÑпÑава и заÑем паÑаллелÑном ÑканиÑовании иÑ
. ÐоÑÑÐ¾Ð¼Ñ Ð¾Ð±Ð° Ñипа даннÑÑ
Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ ÑоÑÑиÑÐ¾Ð²ÐºÑ Ð² полном обÑÑме, а опеÑаÑÐ¾Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ даваÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑй ÑезÑлÑÑÐ°Ñ ÑолÑко Ð´Ð»Ñ Ð¿Ð°Ñ Ð·Ð½Ð°Ñений, оказавÑиÑ
ÑÑ Ð² «одном меÑÑе» пÑи опÑеделÑнном поÑÑдке ÑоÑÑиÑовки. Ðа пÑакÑике ÑÑо ознаÑаеÑ, ÑÑо опеÑаÑÐ¾Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ ÑабоÑаÑÑ ÐºÐ°Ðº пÑовеÑка на ÑавенÑÑво. Ðо пÑи ÑÑом возможно обÑединиÑÑ ÑлиÑнием два ÑазлиÑнÑÑ
Ñипа даннÑÑ
, еÑли они ÑовмеÑÑÐ¸Ð¼Ñ Ð»Ð¾Ð³Ð¸ÑеÑки. ÐапÑимеÑ, опеÑаÑÐ¾Ñ Ð¿ÑовеÑки ÑавенÑÑва smallint и integer Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑименÑÑÑÑÑ Ð´Ð»Ñ Ñоединений ÑлиÑнием; понадобÑÑÑÑ ÑолÑко опеÑаÑоÑÑ ÑоÑÑиÑовки, пÑиводÑÑие оба Ñипа даннÑÑ
в логиÑеÑки ÑовмеÑÑимÑе поÑледоваÑелÑноÑÑи.
ЧÑÐ¾Ð±Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸Ð¼ÐµÐ» Ñ
аÑакÑеÑиÑÑÐ¸ÐºÑ MERGES, он должен ÑвлÑÑÑÑÑ Ñленом ÑемейÑÑва опеÑаÑоÑов индекÑа btree, ÑеализÑÑÑим ÑавенÑÑво. ÐÑо ÑÑебование оÑкладÑваеÑÑÑ, когда опеÑаÑÐ¾Ñ ÑолÑко ÑоздаÑÑÑÑ, Ð²ÐµÐ´Ñ Ð½Ñжное ÑемейÑÑво опеÑаÑоÑов, ÑазÑмееÑÑÑ, еÑÑ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ ÑÑÑеÑÑвоваÑÑ. Ðо ÑÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð½Ðµ бÑÐ´ÐµÑ ÑакÑиÑеÑки пÑименÑÑÑÑÑ Ð´Ð»Ñ Ñоединений ÑлиÑнием, пока не бÑÐ´ÐµÑ Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ ÑооÑвеÑÑÑвÑÑÑее ÑемейÑÑво опеÑаÑоÑов. Таким обÑазом, Ñлаг MERGES ÑолÑко подÑказÑÐ²Ð°ÐµÑ Ð¿Ð»Ð°Ð½Ð¸ÑовÑикÑ, ÑÑо ÑÑÐ¾Ð¸Ñ Ð¾Ð±ÑаÑиÑÑÑÑ Ðº ÑооÑвеÑÑÑвÑÑÑÐµÐ¼Ñ ÑемейÑÑвÑ.
ÐпеÑаÑÐ¾Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑлиÑнием должен имеÑÑ ÐºÐ¾Ð¼Ð¼ÑÑиÑÑÑÑий (ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÐ¾Ñ Ð¶Ðµ опеÑаÑоÑ, еÑли Ñ Ð½ÐµÐ³Ð¾ два опеÑанда одного Ñипа, либо ÑвÑзаннÑй опеÑаÑÐ¾Ñ ÑавенÑÑва, в пÑоÑивном ÑлÑÑае), оÑноÑÑÑийÑÑ Ðº ÑÐ¾Ð¼Ñ Ð¶Ðµ ÑемейÑÑÐ²Ñ Ð¾Ð¿ÐµÑаÑоÑов. Ð ÑлÑÑае его оÑÑÑÑÑÑвиÑ, пÑи попÑÑке иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ Ð¾Ñибки планиÑовÑика. Также желаÑелÑно (Ñ
оÑÑ ÑÑо ÑÑÑого не ÑÑебÑеÑÑÑ), ÑÑÐ¾Ð±Ñ Ð² ÑемейÑÑве опеÑаÑоÑов btree, поддеÑживаÑÑем неÑколÑко Ñипов даннÑÑ
, опÑеделÑлиÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ ÑавенÑÑва Ð´Ð»Ñ Ð²ÑеÑ
комбинаÑий ÑÑиÑ
Ñипов даннÑÑ
; ÑÑо ÑпоÑобÑÑвÑÐµÑ Ð»ÑÑÑей опÑимизаÑии.
ÐÑимеÑание
ФÑнкÑиÑ, ÑеализÑÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑлиÑнием, должна бÑÑÑ Ð¿Ð¾ÑÑоÑнной (IMMUTABLE) или ÑÑабилÑной (STABLE). ÐÑли ÑÑа ÑÑнкÑÐ¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÑÐ¸Ð²Ð°Ñ (VOLATILE), ÑиÑÑема никогда не бÑÐ´ÐµÑ Ð¿ÑименÑÑÑ ÑÑÐ¾Ñ Ð¾Ð¿ÐµÑаÑÐ¾Ñ Ð´Ð»Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑлиÑнием.