11.7. ÐндекÑÑ Ð¿Ð¾ вÑÑажениÑм
ÐÐ½Ð´ÐµÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑоздаÑÑ Ð½Ðµ ÑолÑко по ÑÑолбÑÑ Ð½Ð¸Ð¶ÐµÐ»ÐµÐ¶Ð°Ñей ÑаблиÑÑ, но и по ÑÑнкÑии или ÑкалÑÑÐ½Ð¾Ð¼Ñ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ñ Ð¾Ð´Ð½Ð¸Ð¼ или неÑколÑкими ÑÑолбÑами ÑаблиÑÑ. ÐÑо позволÑÐµÑ Ð±ÑÑÑÑо Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑ Ð´Ð°Ð½Ð½Ñе в ÑаблиÑе по ÑезÑлÑÑаÑам вÑÑиÑлений.
ÐапÑимеÑ, Ð´Ð»Ñ ÑÑавнений без ÑÑÑÑа ÑегиÑÑÑа Ñимволов ÑаÑÑо иÑполÑзÑеÑÑÑ ÑÑнкÑÐ¸Ñ lower:
SELECT * FROM test1 WHERE lower(col1) = 'value';
ÐÑÐ¾Ñ Ð·Ð°Ð¿ÑÐ¾Ñ ÑÐ¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ Ð¸Ð½Ð´ÐµÐºÑ, опÑеделÑннÑй Ð´Ð»Ñ ÑезÑлÑÑаÑа ÑÑнкÑии lower(col1) Ñак:
CREATE INDEX test1_lower_col1_idx ON test1 (lower(col1));
ÐÑли Ð¼Ñ Ð¾Ð±ÑÑвим ÑÑÐ¾Ñ Ð¸Ð½Ð´ÐµÐºÑ ÑникалÑнÑм (UNIQUE), он не даÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÑÑÑоки, в коÑоÑÑÑ
знаÑÐµÐ½Ð¸Ñ col1 ÑазлиÑаÑÑÑÑ ÑолÑко ÑегиÑÑÑом, как и Ñе, в коÑоÑÑÑ
знаÑÐµÐ½Ð¸Ñ col1 дейÑÑвиÑелÑно одинаковÑе. Таким обÑазом, индекÑÑ Ð¿Ð¾ вÑÑажениÑм можно иÑполÑзоваÑÑ ÐµÑÑ Ð¸ Ð´Ð»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ Ð¾Ð³ÑаниÑений, коÑоÑÑе нелÑÐ·Ñ Ð·Ð°Ð¿Ð¸ÑаÑÑ ÐºÐ°Ðº пÑоÑÑÑе огÑаниÑÐµÐ½Ð¸Ñ ÑникалÑноÑÑи.
ÐÑли же ÑаÑÑо вÑполнÑÑÑÑÑ Ð·Ð°Ð¿ÑоÑÑ Ð²Ð¸Ð´Ð°:
SELECT * FROM people WHERE (first_name || ' ' || last_name) = 'John Smith';
Ñогда, возможно, ÑÑÐ¾Ð¸Ñ ÑоздаÑÑ Ñакой индекÑ:
CREATE INDEX people_names ON people ((first_name || ' ' || last_name));
СинÑакÑÐ¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ CREATE INDEX обÑÑно ÑÑебÑÐµÑ Ð·Ð°ÐºÐ»ÑÑаÑÑ Ð¸Ð½Ð´ÐµÐºÑнÑе вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² Ñкобки, как показано во вÑоÑом пÑимеÑе. ÐÑли же вÑÑажение пÑедÑÑавлÑÐµÑ Ñобой пÑоÑÑо вÑзов ÑÑнкÑии, как в пеÑвом пÑимеÑе, дополниÑелÑнÑе Ñкобки можно опÑÑÑиÑÑ.
ÐоддеÑжка индекÑиÑÑемÑÑ
вÑÑажений обÑ
одиÑÑÑ Ð´Ð¾Ð²Ð¾Ð»Ñно доÑого, Ñак как ÑÑи вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑÑиÑлÑÑÑÑÑ Ð¿Ñи каждом добавлении ÑÑÑоки и пÑи каждом изменении без опÑимизаÑии HOT. Ðднако пÑи поиÑке по индекÑÑ Ð¸Ð½Ð´ÐµÐºÑиÑÑемое вÑÑажение не вÑÑиÑлÑеÑÑÑ Ð¿Ð¾Ð²ÑоÑно, Ñак как его ÑезÑлÑÑÐ°Ñ Ñже ÑоÑ
ÑанÑн в индекÑе. Ð ÑаÑÑмоÑÑеннÑÑ
вÑÑе ÑлÑÑаÑÑ
ÑиÑÑема Ð²Ð¸Ð´Ð¸Ñ Ð·Ð°Ð¿ÑÐ¾Ñ ÐºÐ°Ðº WHERE ÑÑолбеÑ_индекÑа = 'конÑÑанÑа', и поÑÑÐ¾Ð¼Ñ Ð¿Ð¾Ð¸Ñк вÑполнÑеÑÑÑ Ñак же бÑÑÑÑо, как и Ñ Ð¿ÑоÑÑÑм индекÑом. Таким обÑазом, индекÑÑ Ð¿Ð¾ вÑÑажениÑм могÑÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ, когда ÑкоÑоÑÑÑ Ð¸Ð·Ð²Ð»ÐµÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
гоÑаздо важнее ÑкоÑоÑÑи Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ изменениÑ.