Руководство по созданию эффективных запросов


 Короткие запросы и индексы Рис. 5.7



Download 17,08 Mb.
Pdf ko'rish
bet63/210
Sana25.06.2022
Hajmi17,08 Mb.
#704548
TuriРуководство
1   ...   59   60   61   62   63   64   65   66   ...   210
Bog'liq
OptimizZaprvPostgreSQL

78

Короткие запросы и индексы
Рис. 5.7 

План выполнения запроса из лис тинга 5.8
и
ндексы
 
и
 
оПератор
 
Like
Еще одна группа условий поиска, которые не являются простым сравнением 
константы со значениями столбца, – это поиск с использованием оператора 
like
. Например, запрос
SELECT *
FROM account
WHERE lower(last_name) like 'johns%';
возвращает все учетные записи, в которых фамилия начинается с «johns». 
В схеме 
postgres_air
список возвращаемых фамилий выглядит следующим 
образом:
"Johnson"
"Johns"
"johns"
"Johnston"
"JOHNSTON"
"JOHNS"
"JOHNSON"
"johnston"
"johnson"
Единственная проблема с этим запросом заключается в том, что он не 
использует функциональный индекс, который мы создали в предыдущем 
разделе, потому что B-деревья не поддерживают поиск с оператором 
like

Если мы проверим план выполнения для этого запроса, то увидим последо-
вательное сканирование таблицы учетных записей.
Как решить эту проблему и избежать полного сканирования?
Одно из возможных решений – переписать запрос, заменив 
like
двумя 
условиями:
SELECT *
FROM account
WHERE (lower(last_name) >= 'johns' AND lower(last_name) < 'johnt')


Индексы и оператор like 

79
План выполнения этого запроса представлен на рис. 5.8, и мы видим, что 
это он использует существующий индекс.
Лучшим решением было бы создать индекс для 
поиска
по
шаблону
:
CREATE INDEX account_last_name_lower_pattern
ON account (lower(last_name) text_pattern_ops);
Рис. 5.8 

План переписанного запроса, использующего индекс
Зачем нужен этот индекс? Потому что сравнение текстовых значений 
зависит от 
локали
: набора правил, касающихся порядка символов, форма-
тирования и прочих особенностей, которые различаются в зависимости от 
языка и страны. Можно подумать, что порядок, принятый в американском 
английском, является универсальным, но это не так. Единственная локаль, 
которая позволила бы нам использовать B-дерево, – это стандартная локаль 
«C», используемая по умолчанию. В этой локали допустимы только символы 
ASCII.
Чтобы узнать, какая локаль была определена при создании базы данных, 
необходимо выполнить команду
SHOW LC_COLLATE;
И если вы проживаете в Соединенных Штатах, то велика вероятность, что 
вы увидите
"en_US.UTF-8"
Созданный индекс будет использоваться запросами с оператором 
like
.
Новый план выполнения для нашего исходного запроса представлен на 
рис. 5.9, и видно, что он использует новый индекс.

Download 17,08 Mb.

Do'stlaringiz bilan baham:
1   ...   59   60   61   62   63   64   65   66   ...   210




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish