64.1. ÐбзоÑ
Postgres Pro поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑеализаÑÐ¸Ñ Ñ ÐµÑ-индекÑов, коÑоÑÑе Ñ ÑанÑÑÑÑ Ð½Ð° диÑке и могÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð²Ð¾ÑÑÑанавливаÑÑÑÑ Ð¿Ð¾Ñле ÑбоÑ. ХеÑ-Ð¸Ð½Ð´ÐµÐºÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾ÑÑÑоен по даннÑм лÑбого Ñипа, в Ñом ÑиÑле Ñипа, Ð´Ð»Ñ ÐºÐ¾ÑоÑого не опÑеделÑн линейнÑй поÑÑдок. ХеÑ-индекÑÑ Ñ ÑанÑÑ ÑолÑко Ñ ÐµÑ-знаÑение индекÑиÑÑемÑÑ Ð´Ð°Ð½Ð½ÑÑ , поÑÑÐ¾Ð¼Ñ ÑÐ°Ð·Ð¼ÐµÑ Ð¸Ð½Ð´ÐµÐºÑиÑÑемого ÑÑолбÑа даннÑÑ Ð½ÐµÐ¾Ð³ÑаниÑен.
ХеÑ-индекÑÑ Ð¼Ð¾Ð³ÑÑ ÑÑÑоиÑÑÑÑ ÑолÑко по Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑÑолбÑÑ Ð¸ не позволÑÑÑ Ð¿ÑовеÑÑÑÑ ÑникалÑноÑÑÑ.
ХеÑ-индекÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑ ÑолÑко опеÑаÑÐ¾Ñ =, поÑÑÐ¾Ð¼Ñ Ð´Ð»Ñ Ð¿Ñедложений WHERE, в коÑоÑÑÑ
ÑигÑÑиÑÑÑÑ Ð¿ÑовеÑки инÑеÑвалов, Ñ
еÑ-индекÑÑ Ð±ÑдÑÑ Ð±ÐµÑполезнÑ.
ÐаждÑй коÑÑеж Ñ ÐµÑ-индекÑа Ñ ÑÐ°Ð½Ð¸Ñ ÑолÑко 4-байÑовое Ñ ÐµÑ-знаÑение, а не ÑакÑиÑеÑкое знаÑение ÑÑолбÑа. Ð ÑезÑлÑÑаÑе Ñ ÐµÑ-индекÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð½Ð°Ð¼Ð½Ð¾Ð³Ð¾ менÑÑе, Ñем B-деÑевÑÑ, пÑи индекÑиÑовании более длиннÑÑ ÑлеменÑов даннÑÑ , ÑÐ°ÐºÐ¸Ñ ÐºÐ°Ðº UUID, URL-адÑеÑа и Ñ. д. ÐоÑколÑÐºÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑÑолбÑов в Ñ ÐµÑ-индекÑе оÑÑÑÑÑÑвÑÑÑ, пÑи его ÑканиÑовании ÑезÑлÑÑаÑÑ Ð±ÑдÑÑ Ð½ÐµÑоÑнÑми. ХеÑ-индекÑÑ Ð¼Ð¾Ð³ÑÑ ÑÑаÑÑвоваÑÑ Ð² ÑканиÑовании индекÑа по биÑовой каÑÑе и обÑаÑном ÑканиÑовании.
ХеÑ-индекÑÑ Ð¿ÑедназнаÑÐµÐ½Ñ Ð² пеÑвÑÑ Ð¾ÑеÑÐµÐ´Ñ Ð´Ð»Ñ Ð½Ð°Ð³ÑÑзки Ñ Ð±Ð¾Ð»ÑÑим колиÑеÑÑвом опеÑаÑий SELECT и UPDATE, коÑоÑÑе вÑполнÑÑÑ ÑканиÑование Ñ Ð¿ÑовеÑкой ÑавенÑÑва Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑÐ¸Ñ ÑаблиÑ. РиндекÑе-B-деÑеве поиÑк должен пÑÐ¾Ñ Ð¾Ð´Ð¸ÑÑ Ð¿Ð¾ деÑÐµÐ²Ñ Ð´Ð¾ ÑÐµÑ Ð¿Ð¾Ñ, пока не бÑÐ´ÐµÑ Ð½Ð°Ð¹Ð´ÐµÐ½Ð° лиÑÑÐ¾Ð²Ð°Ñ ÑÑÑаниÑа. Ð ÑаблиÑÐ°Ñ Ñ Ð¼Ð¸Ð»Ð»Ð¸Ð¾Ð½Ð°Ð¼Ð¸ ÑÑÑок Ñакой «ÑпÑÑк» Ð¼Ð¾Ð¶ÐµÑ ÑвелиÑиÑÑ Ð²ÑÐµÐ¼Ñ Ð´Ð¾ÑÑÑпа к даннÑм. ÐиÑÑовÑм ÑÑÑаниÑам в Ñ ÐµÑ-индекÑе ÑооÑвеÑÑÑвÑÑÑ ÑÑÑаниÑÑ ÑÑеек. РоÑлиÑие Ð¾Ñ Ð¸Ð½Ð´ÐµÐºÑа-B-деÑева Ñ ÐµÑ-Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð½Ð°Ð¿ÑÑмÑÑ Ð¾Ð±ÑаÑаÑÑÑÑ Ðº ÑÑÑаниÑам ÑÑеек, Ñем ÑамÑм поÑенÑиалÑно ÑокÑаÑÐ°Ñ Ð²ÑÐµÐ¼Ñ Ð´Ð¾ÑÑÑпа к индекÑÑ Ð² болÑÑÐ¸Ñ ÑаблиÑÐ°Ñ . ÐÑо ÑокÑаÑение «логиÑеÑкого ввода-вÑвода» ÑÑановиÑÑÑ ÐµÑÑ Ð±Ð¾Ð»ÐµÐµ замеÑнÑм Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑов/даннÑÑ , коÑоÑÑе не ÑмеÑаÑÑÑÑ Ð² обÑÐ¸Ñ Ð±ÑÑеÑÐ°Ñ /ÐÐУ.
ÐонÑÑÑÑкÑÐ¸Ñ Ñ ÐµÑ-индекÑов в пÑинÑипе пÑиÑпоÑоблена Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ñ Ð½ÐµÑавномеÑнÑм ÑаÑпÑеделением Ñ ÐµÑей, однако наиболее ÑÑÑекÑивен в Ð½Ð¸Ñ Ð¿ÑÑмой доÑÑÑп к ÑÑÑаниÑам ÑÑеек, оÑÑÑеÑÑвлÑемÑй пÑи ÑавномеÑном ÑаÑпÑеделении знаÑений Ñ ÐµÑа. Ðогда пÑи добавлении нового знаÑÐµÐ½Ð¸Ñ Ð¾ÐºÐ°Ð·ÑваеÑÑÑ, ÑÑо ÑÑÑаниÑа ÑÑеек заполнена, к ÑÑой ÑÑÑаниÑе пÑивÑзÑваÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе ÑÑÑаниÑÑ Ð¿ÐµÑеполнениÑ, локалÑно ÑаÑÑиÑÑÑÑие Ñ ÑанилиÑе Ð´Ð»Ñ Ð¸Ð½Ð´ÐµÐºÑнÑÑ ÐºÐ¾ÑÑежей, ÑооÑвеÑÑÑвÑÑÑÐ¸Ñ ÑÑÐ¾Ð¼Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ñ ÐµÑа. ÐаÑем в Ñ Ð¾Ð´Ðµ вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾ÑледÑÑÑÐ¸Ñ Ð·Ð°Ð¿ÑоÑов пÑи ÑканиÑовании ÑÑейки Ñ ÐµÑа поÑÑебÑеÑÑÑ Ð¿ÑоÑканиÑоваÑÑ Ð²Ñе ÑÑÑаниÑÑ Ð¿ÐµÑеполнениÑ. Таким обÑазом, неÑбаланÑиÑованнÑй Ñ ÐµÑ-Ð¸Ð½Ð´ÐµÐºÑ Ð´Ð»Ñ Ð½ÐµÐºÐ¾ÑоÑÑÑ Ð´Ð°Ð½Ð½ÑÑ ÑакÑиÑеÑки Ð¼Ð¾Ð¶ÐµÑ Ð¾ÐºÐ°Ð·Ð°ÑÑÑÑ Ñ Ñже индекÑа-B-деÑева по колиÑеÑÑÐ²Ñ ÑÑебÑемÑÑ Ð¾Ð±ÑаÑений к блокам.
ÐÐ²Ð¸Ð´Ñ Ð½ÐµÑÑÑекÑивноÑÑи Ñ ÐµÑ-индекÑов в ÑлÑÑаÑÑ Ð¿ÐµÑÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑказаÑÑ, ÑÑо они лÑÑÑе вÑего Ð¿Ð¾Ð´Ñ Ð¾Ð´ÑÑ Ð´Ð»Ñ ÑникалÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ , даннÑÑ Ñ Ð½Ð¸Ð·ÐºÐ¾Ð¹ ÑÑепенÑÑ ÑникалÑноÑÑи или даннÑÑ Ñ Ð½ÐµÐ±Ð¾Ð»ÑÑим колиÑеÑÑвом ÑÑÑок в одной ÑÑейке Ñ ÐµÑа. Ðдин из возможнÑÑ ÑпоÑобов избежаÑÑ Ð¿Ñоблем â иÑклÑÑиÑÑ Ð¸Ð· индекÑа знаÑÐµÐ½Ð¸Ñ Ñ Ð½Ð¸Ð·ÐºÐ¾Ð¹ ÑÑепенÑÑ ÑникалÑноÑÑи, опÑеделив ÑаÑÑиÑнÑй Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾ ÑÑловиÑ, но Ñакой ваÑÐ¸Ð°Ð½Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð´Ð¾Ð¹Ñи далеко не вÑегда.
Ðак и B-деÑевÑÑ, Ñ ÐµÑ-индекÑÑ Ð²ÑполнÑÑÑ Ð¿ÑоÑÑое Ñдаление индекÑнÑÑ ÐºÐ¾ÑÑежей. ÐÑо оÑÐ»Ð¾Ð¶ÐµÐ½Ð½Ð°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ð¾Ð±ÑлÑживаниÑ, ÑдалÑÑÑÐ°Ñ Ð¸Ð½Ð´ÐµÐºÑнÑе коÑÑежи, о коÑоÑÑÑ Ð¸Ð·Ð²ÐµÑÑно, ÑÑо Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ безопаÑно ÑÑеÑеÑÑ (Ñо еÑÑÑ Ñе, Ð´Ð»Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑов коÑоÑÑÑ ÑÑÑановлен Ð±Ð¸Ñ LP_DEAD). ÐÑли пÑи добавлении нового коÑÑежа обнаÑÑживаеÑÑÑ, ÑÑо на ÑÑÑаниÑе Ð½ÐµÑ Ñвободного меÑÑа, Ð´Ð°Ð½Ð½Ð°Ñ Ð¾Ð¿ÐµÑаÑÐ¸Ñ Ð¿ÑÑаеÑÑÑ Ð¿ÑедоÑвÑаÑиÑÑ Ñоздание новой ÑÑÑаниÑÑ Ð¿ÐµÑеполнениÑ, ÑдалÑÑ Ð¼ÑÑÑвÑе индекÑнÑе коÑÑежи (ÑÑо возможно, ÑолÑко еÑли ÑÑÑаниÑа не закÑеплена). Удаление мÑÑÑвÑÑ Ð¸Ð½Ð´ÐµÐºÑнÑÑ ÑказаÑелей Ñакже пÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð²Ð¾ вÑÐµÐ¼Ñ Ð¾Ð¿ÐµÑаÑии VACUUM.
ÐÑли возможно, опеÑаÑÐ¸Ñ VACUUM Ñакже попÑÑаеÑÑÑ ÑмеÑÑиÑÑ Ð¸Ð½Ð´ÐµÐºÑнÑе коÑÑежи в наименÑÑем колиÑеÑÑве ÑÑÑÐ°Ð½Ð¸Ñ Ð¿ÐµÑеполнениÑ, минимизиÑÑÑ ÑепоÑÐºÑ Ð¿ÐµÑеполнениÑ. ÐÑли ÑÑÑаниÑÑ Ð¿ÐµÑÐµÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑановÑÑÑÑ Ð¿ÑÑÑÑми, они могÑÑ Ð±ÑÑÑ Ð¿ÐµÑеÑабоÑÐ°Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾Ð²ÑоÑного иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´ÑÑгими ÑÑейками, но они никогда не возвÑаÑаÑÑÑÑ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑеме. РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÐµÐ´Ð¸Ð½ÑÑÐ²ÐµÐ½Ð½Ð°Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑменÑÑиÑÑ ÑÐ°Ð·Ð¼ÐµÑ Ñ ÐµÑ-индекÑа â пеÑеÑÑÑоиÑÑ ÐµÐ³Ð¾ командой REINDEX. Также на даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ ÑменÑÑиÑÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво ÑÑеек.
ХеÑ-индекÑÑ Ð¼Ð¾Ð³ÑÑ ÑаÑÑиÑÑÑÑÑÑ Ð·Ð° ÑÑÑÑ ÑвелиÑÐµÐ½Ð¸Ñ ÐºÐ¾Ð»Ð¸ÑеÑÑва ÑÑÑÐ°Ð½Ð¸Ñ ÑÑеек по меÑе ÑвелиÑÐµÐ½Ð¸Ñ ÑиÑла индекÑиÑÑемÑÑ ÑÑÑок. СопоÑÑавление знаÑÐµÐ½Ð¸Ñ Ñ ÐµÑа Ñ Ð½Ð¾Ð¼ÐµÑом ÑÑейки вÑбиÑаеÑÑÑ Ñаким обÑазом, ÑÑÐ¾Ð±Ñ Ð¸Ð½Ð´ÐµÐºÑ Ð¼Ð¾Ð³ ÑаÑÑиÑÑÑÑÑÑ Ð¿Ð¾ÑледоваÑелÑно. Ðогда в Ð¸Ð½Ð´ÐµÐºÑ Ð½Ñжно бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð½Ð¾Ð²ÑÑ ÑÑейкÑ, «ÑазделиÑÑ» пÑидÑÑÑÑ Ñовно Ð¾Ð´Ð½Ñ ÑÑÑеÑÑвÑÑÑÑÑ ÑÑейкÑ, пÑи ÑÑом некоÑоÑÑе из ÐµÑ ÐºÐ¾ÑÑежей бÑдÑÑ Ð¿ÐµÑенеÑÐµÐ½Ñ Ð² новÑÑ ÑÑÐµÐ¹ÐºÑ Ð² ÑооÑвеÑÑÑвии Ñ Ð¸Ð·Ð¼ÐµÐ½ÑннÑм ÑопоÑÑавлением.
ÐÑо ÑаÑÑиÑение вÑполнÑеÑÑÑ Ð½Ð° пеÑеднем плане, и из-за него Ð¼Ð¾Ð¶ÐµÑ ÑвелиÑиваÑÑÑÑ Ð²ÑÐµÐ¼Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑелей. ÐоÑÑÐ¾Ð¼Ñ Ñ ÐµÑ-индекÑÑ Ð¼Ð¾Ð³ÑÑ Ð½Ðµ Ð¿Ð¾Ð´Ñ Ð¾Ð´Ð¸ÑÑ Ð´Ð»Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ñ Ð±ÑÑÑÑо ÑвелиÑиваÑÑимÑÑ ÑиÑлом ÑÑÑок.