11.5. ÐбÑединение неÑколÑÐºÐ¸Ñ Ð¸Ð½Ð´ÐµÐºÑов #
ÐÑи пÑоÑÑом ÑканиÑовании индекÑа могÑÑ Ð¾Ð±ÑабаÑÑваÑÑÑÑ ÑолÑко Ñе пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð² запÑоÑе, в коÑоÑÑÑ
пÑименÑÑÑÑÑ Ð¾Ð¿ÐµÑаÑоÑÑ ÐµÐ³Ð¾ клаÑÑа и обÑединÑÐµÑ Ð¸Ñ
AND. ÐапÑимеÑ, Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑа (a, b) ÑÑловие запÑоÑа WHERE a = 5 AND b = 6 ÑÐ¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ ÑÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑ, а запÑÐ¾Ñ WHERE a = 5 OR b = 6 â неÑ.
Ð ÑÑаÑÑÑÑ, Postgres Pro ÑпоÑобен ÑоединÑÑÑ Ð½ÐµÑколÑко индекÑов (и в Ñом ÑиÑле многокÑаÑно пÑименÑÑÑ Ð¾Ð´Ð¸Ð½ индекÑ) и оÑ
ваÑÑваÑÑ Ñакже ÑлÑÑаи, когда ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ индекÑа недоÑÑаÑоÑно. СиÑÑема Ð¼Ð¾Ð¶ÐµÑ ÑÑоÑмиÑоваÑÑ ÑÑÐ»Ð¾Ð²Ð¸Ñ AND и OR за неÑколÑко пÑоÑ
одов индекÑа. ÐапÑимеÑ, запÑÐ¾Ñ WHERE x = 42 OR x = 47 OR x = 53 OR x = 99 можно ÑазбиÑÑ Ð½Ð° ÑеÑÑÑе ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа по x, по ÑканиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑаÑÑи ÑÑловиÑ. ÐаÑем ÑезÑлÑÑаÑÑ ÑÑиÑ
ÑканиÑований бÑдÑÑ Ð»Ð¾Ð³Ð¸ÑеÑки ÑÐ»Ð¾Ð¶ÐµÐ½Ñ (OR) вмеÑÑе и дадÑÑ ÐºÐ¾Ð½ÐµÑнÑй ÑезÑлÑÑаÑ. ÐÑÑгой пÑÐ¸Ð¼ÐµÑ â еÑли Ñ Ð½Ð°Ñ ÐµÑÑÑ Ð¾ÑделÑнÑе индекÑÑ Ð¿Ð¾ x и y, запÑÐ¾Ñ WHERE x = 5 AND y = 6 можно вÑполниÑÑ, пÑименив индекÑÑ Ð´Ð»Ñ ÑооÑвеÑÑÑвÑÑÑиÑ
ÑаÑÑей запÑоÑа, а заÑем вÑÑиÑлив логиÑеÑкое пÑоизведение (AND) Ð´Ð»Ñ Ð½Ð°Ð¹Ð´ÐµÐ½Ð½ÑÑ
ÑÑÑок, коÑоÑое и ÑÑÐ°Ð½ÐµÑ ÐºÐ¾Ð½ÐµÑнÑм ÑезÑлÑÑаÑом.
ÐÑполнÑÑ Ð¾Ð±Ñединение неÑколÑкиÑ
индекÑов, ÑиÑÑема ÑканиÑÑÐµÑ Ð²Ñе необÑ
одимÑе индекÑÑ Ð¸ ÑоздаÑÑ Ð² памÑÑи биÑовÑÑ ÐºÐ°ÑÑÑ ÑаÑÐ¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑÑÑок ÑаблиÑÑ, коÑоÑÑе ÑдовлеÑвоÑÑÑÑ ÑÑловиÑм каждого индекÑа. ÐаÑем биÑовÑе каÑÑÑ Ð¾Ð±ÑединÑÑÑÑÑ Ð¾Ð¿ÐµÑаÑиÑми AND и OR, как Ñого ÑÑебÑÑÑ ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð² запÑоÑе. ÐÐ°ÐºÐ¾Ð½ÐµÑ ÑиÑÑема обÑаÑаеÑÑÑ Ðº ÑооÑвеÑÑÑвÑÑÑим оÑмеÑеннÑм ÑÑÑокам ÑаблиÑÑ Ð¸ возвÑаÑÐ°ÐµÑ Ð¸Ñ
даннÑе. СÑÑоки ÑаблиÑÑ Ð¿ÑоÑмаÑÑиваÑÑÑÑ Ð² ÑизиÑеÑком поÑÑдке, как они пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ñ Ð² биÑовой каÑÑе; ÑÑо ознаÑаеÑ, ÑÑо поÑÑдок ÑоÑÑиÑовки индекÑов пÑи ÑÑом ÑеÑÑеÑÑÑ Ð¸ в запÑоÑаÑ
Ñ Ð¿Ñедложением ORDER BY ÑоÑÑиÑовка бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð¾ÑделÑно. Ðо ÑÑой пÑиÑине, а Ñакже поÑомÑ, ÑÑо каждое ÑканиÑование индекÑа Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑное вÑемÑ, планиÑовÑик иногда вÑбиÑÐ°ÐµÑ Ð¿ÑоÑÑое ÑканиÑование индекÑа, неÑмоÑÑÑ Ð½Ð° Ñо, ÑÑо можно бÑло Ð±Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑÑ Ð¸ дополниÑелÑнÑе индекÑÑ.
РболÑÑинÑÑве пÑиложений (кÑоме ÑамÑÑ
пÑоÑÑÑÑ
) полезнÑми могÑÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ ÑазлиÑнÑе комбинаÑии индекÑов, поÑÑÐ¾Ð¼Ñ ÑазÑабоÑÑик баз даннÑÑ
, опÑеделÑÑ Ð½Ð°Ð±Ð¾Ñ Ð¸Ð½Ð´ÐµÐºÑов, должен иÑкаÑÑ ÐºÐ¾Ð¼Ð¿ÑомиÑÑное ÑеÑение. Ðногда оказÑваÑÑÑÑ Ñ
оÑоÑи ÑоÑÑавнÑе индекÑÑ, а иногда лÑÑÑе ÑоздаÑÑ Ð¾ÑделÑнÑе индекÑÑ Ð¸ положиÑÑÑÑ Ð½Ð° возможноÑÑи обÑÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑов. ÐапÑимеÑ, еÑли ÑипиÑнÑÑ Ð½Ð°Ð³ÑÑÐ·ÐºÑ ÑоÑÑавлÑÑÑ Ð·Ð°Ð¿ÑоÑÑ Ð¸Ð½Ð¾Ð³Ð´Ð° Ñ ÑÑловием ÑолÑко по ÑÑолбÑÑ x, иногда ÑолÑко по y, а иногда по обоим ÑÑолбÑам, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе огÑаниÑиÑÑÑÑ Ð´Ð²ÑÐ¼Ñ Ð¾ÑделÑнÑми индекÑами по x и y, ÑаÑÑÑиÑÑÐ²Ð°Ñ Ð½Ð° Ñо, ÑÑо пÑи обÑабоÑке ÑÑловий Ñ Ð¾Ð±Ð¾Ð¸Ð¼Ð¸ ÑÑолбÑами ÑÑи индекÑÑ Ð±ÑдÑÑ Ð¾Ð±ÑединÑÑÑÑÑ. С дÑÑгой ÑÑоÑонÑ, Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑоздаÑÑ Ð¾Ð´Ð¸Ð½ ÑоÑÑавной Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾ (x, y). ÐÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑ ÑкоÑее вÑего бÑÐ´ÐµÑ ÑабоÑаÑÑ ÑÑÑекÑивнее, Ñем обÑединение индекÑов, в запÑоÑаÑ
Ñ Ð´Ð²ÑÐ¼Ñ ÑÑолбÑами, но как говоÑилоÑÑ Ð² Разделе 11.3, он бÑÐ´ÐµÑ Ð¿ÑакÑиÑеÑки беÑполезен Ð´Ð»Ñ Ð·Ð°Ð¿ÑоÑов Ñ Ð¾Ð³ÑаниÑениÑми ÑолÑко по y, Ñак ÑÑо одного ÑÑого индекÑа бÑÐ´ÐµÑ Ð½ÐµÐ´Ð¾ÑÑаÑоÑно. ÐÑигÑÑÑнÑм в ÑÑом ÑлÑÑае Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑоÑеÑание ÑоÑÑавного индекÑа Ñ Ð¾ÑделÑнÑм индекÑом по y. РзапÑоÑаÑ
, где задейÑÑвÑеÑÑÑ ÑолÑко x, Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑименÑÑÑÑÑ ÑоÑÑавной индекÑ, Ñ
оÑÑ Ð¾Ð½ бÑÐ´ÐµÑ Ð±Ð¾Ð»ÑÑе и, ÑледоваÑелÑно, медленнее индекÑа по Ð¾Ð´Ð½Ð¾Ð¼Ñ x. ÐаконеÑ, можно ÑоздаÑÑ Ð²Ñе ÑÑи индекÑа, но ÑÑо бÑÐ´ÐµÑ Ð¾Ð¿Ñавдано, ÑолÑко еÑли даннÑе в ÑаблиÑе изменÑÑÑÑÑ Ð³Ð¾Ñаздо Ñеже, Ñем вÑполнÑеÑÑÑ Ð¿Ð¾Ð¸Ñк в ÑаблиÑе, пÑи ÑÑом ÑаÑÑоÑа запÑоÑов ÑÑиÑ
ÑÑÑÑ
Ñипов пÑимеÑно одинакова. ÐÑли запÑоÑÑ ÐºÐ°ÐºÐ¾Ð³Ð¾-Ñо одного Ñипа вÑполнÑÑÑÑÑ Ð³Ð¾Ñаздо Ñеже дÑÑгиÑ
, возможно лÑÑÑе бÑÐ´ÐµÑ Ð¾ÑÑавиÑÑ ÑолÑко два индекÑа, ÑооÑвеÑÑÑвÑÑÑиÑ
наиболее ÑаÑÑÑм запÑоÑам.