59.1. ÐбÑабоÑка запÑоÑа как ÑÐ»Ð¾Ð¶Ð½Ð°Ñ Ð·Ð°Ð´Ð°Ñа опÑимизаÑии #
СÑеди вÑÐµÑ ÑелÑÑионнÑÑ Ð¾Ð¿ÐµÑаÑоÑов ÑамÑм ÑложнÑм Ð´Ð»Ñ Ð¾Ð±ÑабоÑки и опÑимизаÑии ÑвлÑеÑÑÑ Ñоединение. РпеÑвÑÑ Ð¾ÑеÑÐµÐ´Ñ Ð¿Ð¾ÑомÑ, ÑÑо по меÑе ÑвелиÑÐµÐ½Ð¸Ñ ÑиÑла Ñоединений в запÑоÑе ÑиÑло возможнÑÑ Ð¿Ð»Ð°Ð½Ð¾Ð² запÑоÑа ÑвелиÑиваеÑÑÑ ÑкÑпоненÑиалÑно. ÐополниÑелÑÐ½Ð°Ñ ÑложноÑÑÑ Ð¾Ð¿ÑимизаÑии ÑвÑзана Ñ Ð½Ð°Ð»Ð¸Ñием ÑазлиÑнÑÑ Ð¼ÐµÑодов ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ (напÑимеÑ, в Postgres Pro ÑÑо вложеннÑй Ñикл, Ñоединение по Ñ ÐµÑÑ Ð¸ Ñоединение ÑлиÑнием) Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ оÑделÑного ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸ ÑазнообÑазием индекÑов (напÑимеÑ, в Postgres Pro ÑÑо B-деÑево, Ñ ÐµÑ, GiST и GIN), опÑеделÑÑÑÐ¸Ñ Ð¿ÑÑÑ Ð´Ð¾ÑÑÑпа к оÑноÑениÑм.
ТÑадиÑионнÑй опÑимизаÑÐ¾Ñ Ð·Ð°Ð¿ÑоÑов Postgres Pro вÑполнÑÐµÑ Ð¿Ð¾ÑÑи иÑÑеÑпÑваÑÑий поиÑк во вÑÑм множеÑÑве возможнÑÑ ÑÑÑаÑегий. ÐÑÐ¾Ñ Ð°Ð»Ð³Ð¾ÑиÑм, поÑвивÑийÑÑ Ð² СУÐÐ IBM System R, Ð½Ð°Ñ Ð¾Ð´Ð¸Ñ Ð¿Ð¾ÑÑдок Ñоединений, близкий к опÑималÑномÑ, но Ð¼Ð¾Ð¶ÐµÑ ÑÑебоваÑÑ Ð¾Ð³Ñомного колиÑеÑÑва вÑемени и памÑÑи, когда ÑиÑло Ñоединений оказÑваеÑÑÑ Ð±Ð¾Ð»ÑÑим. Ð ÑезÑлÑÑаÑе обÑÑнÑй опÑимизаÑÐ¾Ñ Postgres Pro оказÑваеÑÑÑ Ð½ÐµÐ¿Ð¾Ð´Ñ Ð¾Ð´ÑÑим Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑов, в коÑоÑÑÑ ÑоединÑеÑÑÑ Ð±Ð¾Ð»ÑÑое колиÑеÑÑво ÑаблиÑ.
ÐнÑÑиÑÑÑ Ð°Ð²ÑомаÑиÑеÑкого ÑпÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² Ð¢ÐµÑ Ð½Ð¸ÑеÑком ÑнивеÑÑиÑеÑе ФÑайбеÑгÑÐºÐ°Ñ Ð³Ð¾ÑÐ½Ð°Ñ Ð°ÐºÐ°Ð´ÐµÐ¼Ð¸Ñ, ÐеÑманиÑ, ÑÑолкнÑлÑÑ Ñ ÑÑими пÑоблемами, ÑазÑабаÑÑÐ²Ð°Ñ ÑиÑÑÐµÐ¼Ñ Ð¿ÑинÑÑÐ¸Ñ ÑеÑений на оÑнове Ð±Ð°Ð·Ñ Ð·Ð½Ð°Ð½Ð¸Ð¹ Ð´Ð»Ñ Ð¾Ð±ÑлÑÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ ÑлекÑÑоÑÑанÑий, в коÑоÑой в каÑеÑÑве СУÐРпланиÑовалоÑÑ Ð¿ÑименÑÑÑ PostgreSQL. ÐÐ»Ñ Ð¼Ð°ÑинÑ, делаÑÑей вÑÐ²Ð¾Ð´Ñ Ð½Ð° оÑнове Ð±Ð°Ð·Ñ Ð·Ð½Ð°Ð½Ð¸Ð¹, СУÐРдолжна бÑла вÑполнÑÑÑ Ð·Ð°Ð¿ÑоÑÑ Ñ Ñаким колиÑеÑÑвом Ñоединений, ÑÑо иÑполÑзование обÑÑного опÑимизаÑоÑа запÑоÑов оказалоÑÑ Ð½ÐµÐ¿ÑиемлемÑм.
Ðалее Ð¼Ñ Ð¾Ð¿Ð¸Ñем ÑеализаÑÐ¸Ñ Ð³ÐµÐ½ÐµÑиÑеÑкого алгоÑиÑма, коÑоÑÑй ÑеÑÐ°ÐµÑ Ð¿ÑÐ¾Ð±Ð»ÐµÐ¼Ñ Ð²ÑбоÑа поÑÑдка Ñоединений ÑÑÑекÑивнÑм ÑпоÑобом Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑов Ñ Ð±Ð¾Ð»ÑÑим ÑиÑлом Ñоединений.