50.5. ÐланиÑовÑик/опÑимизаÑÐ¾Ñ #
ÐадаÑа планиÑовÑика/опÑимизаÑоÑа â поÑÑÑоиÑÑ Ð½Ð°Ð¸Ð»ÑÑÑий план вÑполнениÑ. ÐпÑеделÑннÑй SQL-запÑÐ¾Ñ (а знаÑиÑ, и деÑево запÑоÑа) на Ñамом деле можно вÑполниÑÑ ÑамÑми ÑазнÑми ÑпоÑобами, пÑи ÑÑом полÑÑÐ°Ñ Ð¾Ð´Ð½Ð¸ и Ñе же ÑезÑлÑÑаÑÑ. ÐÑли ÑÑо не ÑÑебÑÐµÑ Ð±Ð¾Ð»ÑÑÐ¸Ñ Ð²ÑÑиÑлений, опÑимизаÑÐ¾Ñ Ð·Ð°Ð¿ÑоÑов бÑÐ´ÐµÑ Ð¿ÐµÑебиÑаÑÑ Ð²Ñе возможнÑе ваÑианÑÑ Ð¿Ð»Ð°Ð½Ð¾Ð², ÑÑÐ¾Ð±Ñ Ð² иÑоге вÑбÑаÑÑ ÑоÑ, коÑоÑÑй должен вÑполниÑÑÑÑ Ð±ÑÑÑÑее оÑÑалÑнÑÑ .
ÐÑимеÑание
РнекоÑоÑÑÑ ÑиÑÑаÑиÑÑ ÑаÑÑмоÑÑение вÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½ÑÑ Ð²Ð°ÑианÑов вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ ÑлиÑком много вÑемени и памÑÑи. Ð ÑаÑÑноÑÑи, ÑÑо Ð¸Ð¼ÐµÐµÑ Ð¼ÐµÑÑо пÑи вÑполнении запÑоÑов Ñ Ð±Ð¾Ð»ÑÑим колиÑеÑÑвом опеÑаÑий ÑоединениÑ. ÐоÑÑомÑ, ÑÑÐ¾Ð±Ñ Ð²ÑбÑаÑÑ ÑазÑмнÑй (но не обÑзаÑелÑно наилÑÑÑий) план запÑоÑа за пÑиемлемое вÑемÑ, Postgres Pro иÑполÑзÑÐµÑ Ð³ÐµÐ½ÐµÑиÑеÑкий опÑимизаÑÐ¾Ñ Ð·Ð°Ð¿ÑоÑов (Ñм. ÐлавÑ 58), когда колиÑеÑÑво Ñоединений пÑевÑÑÐ°ÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑй пÑедел (Ñм. geqo_threshold).
ÐÑоÑедÑÑа поиÑка лÑÑÑего плана на Ñамом деле ÑабоÑÐ°ÐµÑ Ñо ÑÑÑÑкÑÑÑами даннÑÑ , назÑваемÑми пÑÑÑми, коÑоÑÑе пÑедÑÑавлÑÑÑ Ñобой ÑпÑоÑÑннÑе ÑÑ ÐµÐ¼Ñ Ð¿Ð»Ð°Ð½Ð¾Ð², ÑодеÑжаÑие минимÑм инÑоÑмаÑии, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ñй планиÑовÑÐ¸ÐºÑ Ð´Ð»Ñ Ð¿ÑинÑÑÐ¸Ñ ÑеÑений. Ðогда наиболее вÑгоднÑй план вÑбÑан, ÑÑÑоиÑÑÑ Ð¿Ð¾Ð»Ð½Ð¾Ñенное деÑево плана, коÑоÑое и пеÑедаÑÑÑÑ Ð¸ÑполниÑелÑ. Ðно опиÑÑÐ²Ð°ÐµÑ Ð¶ÐµÐ»Ð°ÐµÐ¼Ñй план вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð´Ð¾ÑÑаÑоÑно подÑобно, ÑÑÐ¾Ð±Ñ Ð¸ÑполниÑÐµÐ»Ñ Ð¼Ð¾Ð³ обÑабоÑаÑÑ ÐµÐ³Ð¾. РпÑодолжении ÑÑого Ñаздела Ð¼Ñ Ð±Ñдем ÑÑиÑаÑÑ, ÑÑо Ð¿Ð»Ð°Ð½Ñ Ð¸ пÑÑи по ÑÑÑи одно и Ñо же.
50.5.1. ÐÑÑабоÑка возможнÑÑ Ð¿Ð»Ð°Ð½Ð¾Ð² #
СнаÑала планиÑовÑик/опÑимизаÑÐ¾Ñ Ð²ÑÑабаÑÑÐ²Ð°ÐµÑ Ð¿Ð»Ð°Ð½Ñ Ð´Ð»Ñ ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ оÑделÑного оÑноÑÐµÐ½Ð¸Ñ (ÑаблиÑÑ), иÑполÑзÑемого в запÑоÑе. ÐножеÑÑво возможнÑÑ
планов опÑеделÑеÑÑÑ Ð² завиÑимоÑÑи Ð¾Ñ Ð½Ð°Ð»Ð¸ÑÐ¸Ñ Ð¸Ð½Ð´ÐµÐºÑов в каждом оÑноÑении. ÐÑоизвеÑÑи поÑледоваÑелÑное ÑканиÑование оÑноÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ в лÑбом ÑлÑÑае, Ñак ÑÑо план поÑледоваÑелÑного ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑоздаÑÑÑÑ Ð²Ñегда. ÐÑедположим, ÑÑо Ð´Ð»Ñ Ð¾ÑноÑÐµÐ½Ð¸Ñ Ñоздан Ð¸Ð½Ð´ÐµÐºÑ (напÑимеÑ, индекÑ-B-деÑево) и запÑÐ¾Ñ ÑодеÑÐ¶Ð¸Ñ Ð¾Ð³ÑаниÑение оÑноÑение.аÑÑибÑÑ ÐÐÐРконÑÑанÑа. ÐÑли окажеÑÑÑ, ÑÑо оÑноÑение.аÑÑибÑÑ ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ ÐºÐ»ÑÑом индекÑа-B-деÑева и ÐÐÐÐ â один из опеÑаÑоÑов, вÑ
одÑÑиÑ
в клаÑÑ Ð¾Ð¿ÐµÑаÑоÑов индекÑа, ÑоздаÑÑÑÑ ÐµÑÑ Ð¾Ð´Ð¸Ð½ план, c иÑполÑзованием индекÑа-B-деÑева Ð´Ð»Ñ ÑÑÐµÐ½Ð¸Ñ Ð¾ÑноÑениÑ. ÐÑли наÑ
одÑÑÑÑ Ð´ÑÑгие индекÑÑ, клÑÑи коÑоÑÑÑ
ÑооÑвеÑÑÑвÑÑÑ Ð¾Ð³ÑаниÑениÑм запÑоÑа, могÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑÑÑ Ð¸ дÑÑгие планÑ. ÐÐ»Ð°Ð½Ñ ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа Ñакже ÑоздаÑÑÑÑ Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑов, еÑли иÑ
поÑÑдок ÑоÑÑиÑовки ÑооÑвеÑÑÑвÑÐµÑ Ð¿ÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ORDER BY (еÑли оно еÑÑÑ), или ÑÑÐ¾Ñ Ð¿Ð¾ÑÑдок Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·ÐµÐ½ Ð´Ð»Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑлиÑнием (Ñм. ниже).
ÐÑли в запÑоÑе ÑÑебÑеÑÑÑ ÑоединиÑÑ Ð´Ð²Ð° или неÑколÑко оÑноÑений, поÑле Ñого, как бÑдÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð²Ñе Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑие Ð¿Ð»Ð°Ð½Ñ ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¾ÑделÑнÑÑ Ð¾ÑноÑений, ÑаÑÑмаÑÑиваÑÑÑÑ Ð¿Ð»Ð°Ð½Ñ ÑоединениÑ. ÐÑи ÑÑом Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ ÑÑи ÑÑÑаÑегии ÑоединениÑ:
Ñоединение Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñм Ñиклом: ÐÑавое оÑноÑение ÑканиÑÑеÑÑÑ Ð¾Ð´Ð¸Ð½ Ñаз Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑÑÑоки, найденной в левом оÑноÑении. ÐÑÑ ÑÑÑаÑÐµÐ³Ð¸Ñ Ð»ÐµÐ³ÐºÐ¾ ÑеализоваÑÑ, но она Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾ÑÐµÐ½Ñ ÑÑÑдоÑмкой. (Ðднако еÑли пÑавое оÑноÑение можно ÑканиÑоваÑÑ Ð¿Ð¾ индекÑÑ, ÑÑа ÑÑÑаÑÐµÐ³Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑдаÑной. Тогда знаÑÐµÐ½Ð¸Ñ Ð¸Ð· ÑекÑÑей ÑÑÑоки левого оÑноÑÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð¸ÑполÑзоваÑÑÑÑ ÐºÐ°Ðº клÑÑи Ð´Ð»Ñ ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ индекÑÑ ÑпÑава.)
Ñоединение ÑлиÑнием: Ðаждое оÑноÑение ÑоÑÑиÑÑеÑÑÑ Ð¿Ð¾ аÑÑибÑÑам ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð´Ð¾ наÑала ÑоединениÑ. ÐаÑем два оÑноÑÐµÐ½Ð¸Ñ ÑканиÑÑÑÑÑÑ Ð¿Ð°ÑаллелÑно и ÑооÑвеÑÑÑвÑÑÑие ÑÑÑоки, обÑединÑÑÑÑ, ÑоÑмиÑÑÑÑ ÑÑÑоки ÑоединениÑ. ÐÑÐ¾Ñ Ñип ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ пÑивлекаÑелÑнÑй, Ñак как каждое оÑноÑение ÑканиÑÑеÑÑÑ ÑолÑко один Ñаз. ТÑебÑемÑй поÑÑдок ÑоÑÑиÑовки можно полÑÑиÑÑ, либо добавив ÑвнÑй ÑÑап ÑоÑÑиÑовки, либо пÑоÑканиÑовав оÑноÑение в нÑжном поÑÑдке, иÑполÑзÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾ клÑÑÑ ÑоединениÑ.
Ñоединение по Ñ ÐµÑÑ: ÑнаÑала ÑканиÑÑеÑÑÑ Ð¿Ñавое оÑноÑение и ÑоÑмиÑÑеÑÑÑ Ñ ÐµÑ-ÑаблиÑа, клÑÑ Ð² коÑоÑой вÑÑиÑлÑеÑÑÑ Ð¿Ð¾ аÑÑибÑÑам ÑоединениÑ. ÐаÑем ÑканиÑÑеÑÑÑ Ð»ÐµÐ²Ð¾Ðµ оÑноÑение и по Ñем же аÑÑибÑÑам в каждой ÑÑÑоке вÑÑиÑлÑеÑÑÑ ÐºÐ»ÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка в ÑÑой Ñ ÐµÑ-ÑаблиÑе ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ ÑÑÑок ÑпÑава.
Ðогда в запÑоÑе задейÑÑÐ²Ð¾Ð²Ð°Ð½Ñ Ð±Ð¾Ð»ÐµÐµ двÑÑ Ð¾ÑноÑений, оконÑаÑелÑнÑй ÑезÑлÑÑÐ°Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ Ð¿Ð¾Ð»ÑÑен из деÑева Ñ Ñзлами ÑоединениÑ, имеÑÑими по два Ð²Ñ Ð¾Ð´Ð°. ÐланиÑовÑик ÑаÑÑмаÑÑÐ¸Ð²Ð°ÐµÑ Ð²Ñе возможнÑе поÑледоваÑелÑноÑÑи ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸ вÑбиÑÐ°ÐµÑ ÑамÑÑ Ð²ÑгоднÑÑ.
ÐÑли ÑиÑло задейÑÑвованнÑÑ
в запÑоÑе оÑноÑений менÑÑе geqo_threshold, Ð´Ð»Ñ Ð¿Ð¾Ð¸Ñка опÑималÑной поÑледоваÑелÑноÑÑи Ñоединений пÑоизводиÑÑÑ Ð¿ÑакÑиÑеÑки полнÑй пеÑебоÑ. ÐланиÑовÑик оÑдаÑÑ Ð¿ÑедпоÑÑение ÑоединениÑм Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²ÑÐ¼Ñ Ð¾ÑноÑениÑми, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ
еÑÑÑ ÑооÑвеÑÑÑвÑÑÑее пÑедложение ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð² ÑÑловии WHERE (Ñо еÑÑÑ, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ
наÑ
одиÑÑÑ Ð¾Ð³ÑаниÑение вида where Ñабл1.аÑÑ1=Ñабл2.аÑÑ2). ÐаÑÑ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð±ÐµÐ· подобного пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑаÑÑмаÑÑиваÑÑÑÑ, ÑолÑко еÑли Ð½ÐµÑ Ð´ÑÑгого вÑбоÑа, Ñо еÑÑÑ ÐºÐ¾Ð³Ð´Ð° Ð´Ð»Ñ Ð¾Ð¿ÑеделÑнного оÑноÑÐµÐ½Ð¸Ñ Ð½Ðµ наÑ
одÑÑÑÑ Ð¿ÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ ÐºÐ°ÐºÐ¸Ð¼-либо дÑÑгим оÑноÑением. ÐланиÑовÑик ÑаÑÑмаÑÑÐ¸Ð²Ð°ÐµÑ Ð²Ñе возможнÑе Ð¿Ð»Ð°Ð½Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ паÑÑ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸ вÑбиÑÐ°ÐµÑ ÑамÑй вÑгоднÑй из ниÑ
(по его оÑенке).
ÐÑли geqo_threshold пÑевÑÑаеÑÑÑ, поÑледоваÑелÑноÑÑÑ Ñоединений вÑбиÑаеÑÑÑ ÑвÑиÑÑиÑеÑким пÑÑÑм, как опиÑано в Ðлаве 58. РоÑÑалÑном пÑоÑеÑÑ Ð¿Ð»Ð°Ð½Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑÐ¾Ñ Ð¶Ðµ.
ÐаконÑенное деÑево плана ÑодеÑÐ¶Ð¸Ñ ÑÐ·Ð»Ñ ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ индекÑÑ Ð¸Ð»Ð¸ поÑледоваÑелÑного ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð±Ð°Ð·Ð¾Ð²ÑÑ
оÑноÑений, плÑÑ ÑÐ·Ð»Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½Ñм Ñиклом, ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑлиÑнием или ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ Ñ
еÑÑ (еÑли ÑÑебÑеÑÑÑ), плÑÑ, возможно, ÑÐ·Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ
дейÑÑвий, напÑимеÑ, ÑоÑÑиÑовки или вÑÑиÑÐ»ÐµÐ½Ð¸Ñ Ð°Ð³ÑегаÑнÑÑ
ÑÑнкÑий. ÐолÑÑинÑÑво из ÑÑиÑ
Ñзлов могÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑно пÑоизводиÑÑ Ð¾ÑÐ±Ð¾Ñ (оÑбÑаÑÑваÑÑ ÑÑÑоки, не ÑдовлеÑвоÑÑÑÑие Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¼Ñ Ð»Ð¾Ð³Ð¸ÑеÑÐºÐ¾Ð¼Ñ ÑÑловиÑ) и ÑаÑÑÑÑÑ (вÑÑиÑлÑÑÑ Ð¿ÑоизводнÑй Ð½Ð°Ð±Ð¾Ñ ÑÑолбÑов по знаÑениÑм заданнÑÑ
ÑÑолбÑов, Ñо еÑÑÑ Ð²ÑÑиÑлÑÑÑ ÑкалÑÑнÑе вÑÑажениÑ). Ðдна из Ð·Ð°Ð´Ð°Ñ Ð¿Ð»Ð°Ð½Ð¸ÑовÑика â добавиÑÑ ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð¾ÑбоÑа из пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ WHERE и вÑÑиÑÐ»ÐµÐ½Ð¸Ñ ÑÑебÑемÑÑ
вÑÑ
однÑÑ
вÑÑажений к наиболее подÑ
одÑÑим Ñзлам деÑева плана.