11.1. Ðведение
ÐÑедположим, ÑÑо Ñ Ð½Ð°Ñ ÐµÑÑÑ ÑÐ°ÐºÐ°Ñ ÑаблиÑа:
CREATE TABLE test1 (
id integer,
content varchar
);и пÑиложение вÑполнÑÐµÑ Ð¼Ð½Ð¾Ð³Ð¾ подобнÑÑ Ð·Ð°Ð¿ÑоÑов:
SELECT content FROM test1 WHERE id = конÑÑанÑа; ÐÑли ÑиÑÑема не бÑÐ´ÐµÑ Ð·Ð°Ñанее подгоÑовлена, ей пÑидÑÑÑÑ ÑканиÑоваÑÑ Ð²ÑÑ ÑаблиÑÑ test1, ÑÑÑÐ¾ÐºÑ Ð·Ð° ÑÑÑокой, ÑÑÐ¾Ð±Ñ Ð½Ð°Ð¹Ñи вÑе подÑ
одÑÑие запиÑи. Ðогда ÑаблиÑа test1 ÑодеÑÐ¶Ð¸Ñ Ð±Ð¾Ð»ÑÑое колиÑеÑÑво запиÑей, а ÑÑÐ¾Ñ Ð·Ð°Ð¿ÑÐ¾Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ веÑнÑÑÑ Ð²Ñего неÑколÑко (возможно, Ð¾Ð´Ð½Ñ Ð¸Ð»Ð¸ нолÑ), Ñакое ÑканиÑование, оÑевидно, неÑÑÑекÑивно. Ðо еÑли ÑоздаÑÑ Ð² ÑиÑÑеме Ð¸Ð½Ð´ÐµÐºÑ Ð¿Ð¾ Ð¿Ð¾Ð»Ñ id, она ÑÐ¼Ð¾Ð¶ÐµÑ Ð½Ð°Ñ
одиÑÑ ÑÑÑоки гоÑаздо бÑÑÑÑее. Ðозможно, Ð´Ð»Ñ ÑÑого ей понадобиÑÑÑ Ð¾Ð¿ÑÑÑиÑÑÑÑ Ð²Ñего на неÑколÑко ÑÑовней в деÑеве поиÑка.
ÐодобнÑй Ð¿Ð¾Ð´Ñ Ð¾Ð´ ÑаÑÑо иÑполÑзÑеÑÑÑ Ð² ÑÐµÑ Ð½Ð¸ÑеÑкой лиÑеÑаÑÑÑе: ÑеÑÐ¼Ð¸Ð½Ñ Ð¸ понÑÑиÑ, коÑоÑÑе могÑÑ Ð¿ÑедÑÑавлÑÑÑ Ð¸Ð½ÑеÑеÑ, ÑобиÑаÑÑÑÑ Ð² алÑавиÑном ÑказаÑеле в конÑе книги. ЧиÑаÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑоÑмоÑÑеÑÑ ÑÑÐ¾Ñ ÑказаÑÐµÐ»Ñ Ð´Ð¾Ð²Ð¾Ð»Ñно бÑÑÑÑо и заÑем пеÑейÑи ÑÑÐ°Ð·Ñ Ðº ÑооÑвеÑÑÑвÑÑÑей ÑÑÑаниÑе, вмеÑÑо Ñого, ÑÑÐ¾Ð±Ñ Ð¿ÑолиÑÑÑваÑÑ Ð²ÑÑ ÐºÐ½Ð¸Ð³Ñ Ð² поиÑÐºÐ°Ñ Ð½Ñжного маÑеÑиала. Так же, как задаÑа авÑоÑа пÑедÑгадаÑÑ, ÑÑо именно бÑдÑÑ Ð¸ÑкаÑÑ Ð² книге ÑиÑаÑели, задаÑа пÑогÑаммиÑÑа баз даннÑÑ â заÑанее опÑеделиÑÑ, какие индекÑÑ Ð±ÑдÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ.
СоздаÑÑ Ð¸Ð½Ð´ÐµÐºÑ Ð´Ð»Ñ ÑÑолбÑа id ÑаÑÑмоÑÑенной Ñанее ÑаблиÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑледÑÑÑей командÑ:
CREATE INDEX test1_id_index ON test1 (id);
ÐÐ¼Ñ Ð¸Ð½Ð´ÐµÐºÑа test1_id_index Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÑоизволÑнÑм, главное, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¾ позволÑло понÑÑÑ, Ð´Ð»Ñ Ñего ÑÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑ.
ÐÐ»Ñ ÑÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа иÑполÑзÑеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° DROP INDEX. ÐобавлÑÑÑ Ð¸ ÑдалÑÑÑ Ð¸Ð½Ð´ÐµÐºÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ в лÑбое вÑемÑ.
Ðогда Ð¸Ð½Ð´ÐµÐºÑ Ñоздан, никакие дополниÑелÑнÑе дейÑÑÐ²Ð¸Ñ Ð½Ðµ ÑÑебÑÑÑÑÑ: ÑиÑÑема Ñама бÑÐ´ÐµÑ Ð¾Ð±Ð½Ð¾Ð²Ð»ÑÑÑ ÐµÐ³Ð¾ пÑи изменении даннÑÑ
в ÑаблиÑе и Ñама бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑ ÐµÐ³Ð¾ в запÑоÑаÑ
, где, по ÐµÑ Ð¼Ð½ÐµÐ½Ð¸Ñ, ÑÑо бÑÐ´ÐµÑ ÑÑÑекÑивнее, Ñем ÑканиÑование вÑей ÑаблиÑÑ. Ðам, возможно, пÑидÑÑÑÑ ÑолÑко пеÑиодиÑеÑки запÑÑкаÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ANALYZE Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ ÑÑаÑиÑÑиÑеÑкиÑ
даннÑÑ
, на оÑнове коÑоÑÑÑ
планиÑовÑик запÑоÑов пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑеÑениÑ. Ð Ðлаве 14 Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑзнаÑÑ, как опÑеделиÑÑ, иÑполÑзÑеÑÑÑ Ð»Ð¸ опÑеделÑннÑй Ð¸Ð½Ð´ÐµÐºÑ Ð¸ пÑи какиÑ
ÑÑловиÑÑ
планиÑовÑик Ð¼Ð¾Ð¶ÐµÑ ÑеÑиÑÑ Ð½Ðµ иÑполÑзоваÑÑ ÐµÐ³Ð¾.
ÐндекÑÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ Ñакже пÑи вÑполнении команд UPDATE и DELETE Ñ ÑÑловиÑми поиÑка. ÐÑоме Ñого, они могÑÑ Ð¿ÑименÑÑÑÑÑ Ð² поиÑке Ñ Ñоединением. То еÑÑÑ, индекÑ, опÑеделÑннÑй Ð´Ð»Ñ ÑÑолбÑа, ÑÑаÑÑвÑÑÑего в ÑÑловии ÑоединениÑ, Ð¼Ð¾Ð¶ÐµÑ Ð·Ð½Ð°ÑиÑелÑно ÑÑкоÑиÑÑ Ð·Ð°Ð¿ÑоÑÑ Ñ JOIN.
Создание индекÑа Ð´Ð»Ñ Ð±Ð¾Ð»ÑÑой ÑаблиÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð½Ð¸Ð¼Ð°ÑÑ Ð¼Ð½Ð¾Ð³Ð¾ вÑемени. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Postgres Pro позволÑÐµÑ Ð¿Ð°ÑаллелÑно Ñ Ñозданием индекÑа вÑполнÑÑÑ ÑÑение (опеÑаÑоÑÑ SELECT) ÑаблиÑÑ, но опеÑаÑии запиÑи (INSERT, UPDATE и DELETE) блокиÑÑÑÑÑÑ Ð´Ð¾ оконÑÐ°Ð½Ð¸Ñ Ð¿Ð¾ÑÑÑÐ¾ÐµÐ½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа. ÐÐ»Ñ Ð¿ÑоизводÑÑвенной ÑÑÐµÐ´Ñ ÑÑо огÑаниÑение ÑаÑÑо бÑÐ²Ð°ÐµÑ Ð½ÐµÐ¿ÑиемлемÑм. ХоÑÑ ÐµÑÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ ÑазÑеÑиÑÑ Ð·Ð°Ð¿Ð¸ÑÑ Ð¿Ð°ÑаллелÑно Ñ Ñозданием индекÑов, пÑи ÑÑом нÑжно ÑÑиÑÑваÑÑ ÑÑд оговоÑок â они опиÑÐ°Ð½Ñ Ð² подÑазделе ÐеблокиÑÑÑÑее поÑÑÑоение индекÑов.
ÐоÑле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑа ÑиÑÑема должна поддеÑживаÑÑ ÐµÐ³Ð¾ в ÑоÑÑоÑнии, ÑооÑвеÑÑÑвÑÑÑем даннÑм ÑаблиÑÑ. С ÑÑим ÑвÑÐ·Ð°Ð½Ñ Ð½ÐµÐ¸Ð·Ð±ÐµÐ¶Ð½Ñе накладнÑе ÑаÑÑ Ð¾Ð´Ñ Ð¿Ñи изменении даннÑÑ . ÐалиÑие индекÑов Ñакже Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑепÑÑÑÑвоваÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐ¾ÑÑежей ÑолÑко в кÑÑе. Таким обÑазом, индекÑÑ, коÑоÑÑе иÑполÑзÑÑÑÑÑ Ð² запÑоÑÐ°Ñ Ñедко или вообÑе никогда, Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑдаленÑ.