61.5. ÐÑиÑÐ¼Ñ Ð¸ ÑовеÑÑ Ð¿Ð¾ пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ GIN
- Создание или добавление
Ðобавление обÑекÑов в Ð¸Ð½Ð´ÐµÐºÑ GIN Ð¼Ð¾Ð¶ÐµÑ Ð²ÑполнÑÑÑÑÑ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½Ð¾, Ñак как Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ обÑекÑа ÑкоÑее вÑего поÑÑебÑеÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ Ð¼Ð½Ð¾Ð¶ÐµÑÑво клÑÑей. ÐоÑÑÐ¾Ð¼Ñ Ð¿Ñи маÑÑовом добавлении даннÑÑ Ð² ÑаблиÑÑ ÑекомендÑеÑÑÑ ÑдалиÑÑ Ð¸Ð½Ð´ÐµÐºÑ GIN и пеÑеÑоздаÑÑ ÐµÐ³Ð¾ по оконÑании добавлениÑ.
ÐаÑÐ¸Ð½Ð°Ñ Ñ PostgreSQL 8.4, ÑÑÐ¾Ñ ÑÐ¾Ð²ÐµÑ Ð¼ÐµÐ½ÐµÐµ акÑÑален, Ñак как вÑполнение индекÑаÑии Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾ÑложеннÑм (подÑобнее об ÑÑом в ÐодÑазделе 61.4.1). Ðо пÑи оÑÐµÐ½Ñ Ð±Ð¾Ð»ÑÑом обÑÑме изменений Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð»ÑÑÑе вÑÑ-Ñаки ÑдалиÑÑ Ð¸ пеÑеÑоздаÑÑ Ð¸Ð½Ð´ÐµÐºÑ.
- maintenance_work_mem
ÐÑÐµÐ¼Ñ Ð¿Ð¾ÑÑÑÐ¾ÐµÐ½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа GIN оÑÐµÐ½Ñ ÑилÑно завиÑÐ¸Ñ Ð¾Ñ Ð¿Ð°ÑамеÑÑа
maintenance_work_mem; не ÑÑÐ¾Ð¸Ñ ÑкономиÑÑ Ð½Ð° ÑабоÑей памÑÑи пÑи Ñоздании индекÑа.- gin_pending_list_limit
РпÑоÑеÑÑе поÑледоваÑелÑнÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ð¹ в ÑÑÑеÑÑвÑÑÑий Ð¸Ð½Ð´ÐµÐºÑ GIN Ñ Ð²ÐºÐ»ÑÑÑннÑм Ñежимом
fastupdate, ÑиÑÑема бÑÐ´ÐµÑ Ð¾ÑиÑаÑÑ ÑпиÑок ожидаÑÑÐ¸Ñ Ð¸Ð½Ð´ÐµÐºÑаÑии запиÑей, когда его ÑÐ°Ð·Ð¼ÐµÑ Ð±ÑÐ´ÐµÑ Ð¿ÑевÑÑаÑÑgin_pending_list_limit. Ðо избежание знаÑиÑелÑнÑÑ ÐºÐ¾Ð»ÐµÐ±Ð°Ð½Ð¸Ð¹ конеÑного вÑемени оÑвеÑа Ð¸Ð¼ÐµÐµÑ ÑмÑÑл пÑоводиÑÑ Ð¾ÑиÑÑÐºÑ ÑÑого ÑпиÑка в Ñоновом Ñежиме (Ñо еÑÑÑ, пÑименÑÑ Ð°Ð²ÑооÑиÑÑкÑ). ÐзбежаÑÑ Ð¾Ð¿ÐµÑаÑий оÑиÑÑки на пеÑеднем плане можно, ÑвелиÑивgin_pending_list_limitили пÑÐ¾Ð²Ð¾Ð´Ñ Ð°Ð²ÑооÑиÑÑÐºÑ Ð±Ð¾Ð»ÐµÐµ акÑивно. Ðднако, еÑли вÑледÑÑвие ÑвелиÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ñога опеÑаÑии оÑиÑÑки запÑÑÑиÑÑÑ Ð¾ÑиÑÑка на пеÑеднем плане, она бÑÐ´ÐµÑ Ð²ÑполнÑÑÑÑÑ ÐµÑÑ Ð´Ð¾Ð»ÑÑе.ÐнаÑение
gin_pending_list_limitможно пеÑеопÑеделиÑÑ Ð´Ð»Ñ Ð¾ÑделÑнÑÑ Ð¸Ð½Ð´ÐµÐºÑов GIN, изменив Ð¸Ñ Ð¿Ð°ÑамеÑÑÑ Ñ ÑанениÑ, ÑÑо позволÑÐµÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ индекÑа GIN Ñвой поÑог оÑиÑÑки. ÐапÑимеÑ, можно ÑвелиÑиÑÑ Ð¿Ð¾Ñог ÑолÑко Ð´Ð»Ñ ÑаÑÑо обновлÑемÑÑ Ð¸Ð½Ð´ÐµÐºÑов GIN и оÑÑавиÑÑ ÐµÐ³Ð¾ низким Ð´Ð»Ñ Ð¾ÑÑалÑнÑÑ .- gin_fuzzy_search_limit
ÐÑновной ÑелÑÑ ÑазÑабоÑки индекÑов GIN бÑло обеÑпеÑиÑÑ Ð¿Ð¾Ð´Ð´ÐµÑÐ¶ÐºÑ Ñ Ð¾ÑоÑо ÑаÑÑиÑÑемого полноÑекÑÑового поиÑка в Postgres Pro, а пÑи полноÑекÑÑовом поиÑке неÑедко возникаÑÑ ÑиÑÑаÑии, когда возвÑаÑаеÑÑÑ Ð¾ÑÐµÐ½Ñ Ð±Ð¾Ð»ÑÑой Ð½Ð°Ð±Ð¾Ñ ÑезÑлÑÑаÑов. Ðднако ÑаÑе вÑего Ñак пÑоиÑÑ Ð¾Ð´Ð¸Ñ, когда запÑÐ¾Ñ ÑодеÑÐ¶Ð¸Ñ Ð¾ÑÐµÐ½Ñ ÑаÑÑо вÑÑÑеÑаÑÑиеÑÑ Ñлова, Ñак ÑÑо полÑÑеннÑй ÑезÑлÑÑÐ°Ñ Ð²ÑÑ Ñавно оказÑваеÑÑÑ Ð±ÐµÑполезнÑм. Так как ÑÑение множеÑÑва запиÑей Ñ Ð´Ð¸Ñка и поÑледÑÑÑÐ°Ñ ÑоÑÑиÑовка Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð½ÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ вÑемени, ÑÑо непÑиемлемо в пÑоизводÑÑвеннÑÑ ÑÑловиÑÑ . (ÐамеÑÑÑе, ÑÑо поиÑк по индекÑÑ Ð¿Ñи ÑÑом вÑполнÑеÑÑÑ Ð¾ÑÐµÐ½Ñ Ð±ÑÑÑÑо.)
ÐÐ»Ñ ÑпÑавлÑемого вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÐ°ÐºÐ¸Ñ Ð·Ð°Ð¿ÑоÑов в GIN введено наÑÑÑаиваемое мÑгкое огÑаниÑение ÑвеÑÑ Ñ Ð´Ð»Ñ ÑиÑла возвÑаÑаемÑÑ ÑÑÑок: конÑигÑÑаÑионнÑй паÑамеÑÑ
gin_fuzzy_search_limit. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð½ Ñавен 0 (Ñо еÑÑÑ Ð¾Ð³ÑаниÑение оÑÑÑÑÑÑвÑеÑ). ÐÑли он Ð¸Ð¼ÐµÐµÑ Ð½ÐµÐ½Ñлевое знаÑение, возвÑаÑаемÑй Ð½Ð°Ð±Ð¾Ñ ÑÑÑок бÑÐ´ÐµÑ ÑлÑÑайно вÑбÑаннÑм подмножеÑÑвом вÑего набоÑа ÑезÑлÑÑаÑов.«ÐÑгким» оно назÑваеÑÑÑ Ð¿Ð¾ÑомÑ, ÑÑо ÑакÑиÑеÑкое ÑиÑло возвÑаÑаемÑÑ ÑÑÑок Ð¼Ð¾Ð¶ÐµÑ Ð½ÐµÑколÑко оÑлиÑаÑÑÑÑ Ð¾Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ знаÑениÑ, в завиÑимоÑÑи Ð¾Ñ Ð·Ð°Ð¿ÑоÑа и каÑеÑÑва ÑиÑÑемного генеÑаÑоÑа ÑлÑÑайнÑÑ ÑиÑел.
Ðз пÑакÑики, Ñо знаÑениÑми в неÑколÑко ÑÑÑÑÑ (напÑимеÑ, 5000 â 20000) полÑÑаÑÑÑÑ Ð¿ÑиемлемÑе ÑезÑлÑÑаÑÑ.