172 похожих чатов

И еще вопрос Читаю книгу, и там пишут, что индекс

для такого запрос
SELECT * FROM coordinates WHERE longitude > 51.21321 AND
longitude < 100.21323 AND latitude > 21.123123 AND latitude < 23.123123;
Будет не эффективено выполняться. Вопрос почему? Разве для btree index сложно выбрать значения между ?

19 ответов

9 просмотров

> Подскажите, есть ли отличие custom и concatenated index? А откуда эта терминология, вообще (про отличия надо спрашивать того, кто её придумал)? > Я так понимаю, что БД поняла, что данных в таблице нет и использовать индекс нет смысла? Если гадать — то, скорее всего, случился autovacuum / autoanalyze, и таки да, "поняла". > Разве для btree index сложно выбрать значения между ? Разумеется, сложно. Вам стоит разобраться, как он устроен (или, для начала, понять на уровне аналогий — обычно приводят примеры отсортированного массива, телефонного справочника и индекса (алфавитного указателя) в книгах — в каждом из них тоже [может быть] составной ключ).

DORIAN GRAY- Автор вопроса
Yaroslav Schekin
> Подскажите, есть ли отличие custom и concatenate...

Сложность в том , что нужно искать в двух диапазонах ? Или запрос с одним диапазоном тоже сложный был бы?

DORIAN GRAY
Сложность в том , что нужно искать в двух диапазон...

Да. Нет. Разберитесь, как устроен b-tree индекс — это основной (а в некоторых — и единственный, наверное) тип индекса во всех "классических" RDBMS, поэтому изучить его полезно.

DORIAN GRAY- Автор вопроса
Yaroslav Schekin
Да. Нет. Разберитесь, как устроен b-tree индекс —...

Ну что значит разберись. Я плюс минус знаю как оно работает. Есть дерево, есть уровни с ссылками на другие уровни со значениями меньше или больше. В конце ссылки введут на место в памяти, где уже и лежат сами значения.

DORIAN GRAY
Ну что значит разберись. Я плюс минус знаю как оно...

Если знаете, то почему с вопросами выше какие-то сложности?

Смотрите, допустим у вас не составной индекс. Тогда он использует только индекс по лонгитюду например, а латитюд ему придется тупо фильтровать.

А составной индекс не поможет, потому что будет слишком много уникальных значений латитюда и он по сути просто сведется к несоставному

Владимир Гришин
А составной индекс не поможет, потому что будет сл...

И дажэ если бы не слишком много — с оптимизацыями пропусков в постгресе пока тяжко.

DORIAN GRAY- Автор вопроса
Владимир Гришин
Смотрите, допустим у вас не составной индекс. Тогд...

Так сложность заключается не в том, что по двум параметрам искать, а в том, что нужно искать между двумя значениями ?

Ilya Anfimov
И дажэ если бы не слишком много — с оптимизацыями ...

Это да... почти везде уже есть, а у нас так и нет. ;( Я даже помню, как я общался с кем-то, кто хотел "для себя" написать какой-то инструмент (не помню, зачем там была СУБД), и просто выкинул PostgreSQL из списка поддерживаемых им СУБД именно поэтому (только в нём какой-то важный запрос выполнялся неприемлемо долго).

DORIAN GRAY
Так сложность заключается не в том, что по двум па...

В одномерном случае все хорошо и быстро, но представьте, что у вас после выборки по первому индексу осталась миллион точек. Что делать? Индекс уже не используешь. Только секскан

DORIAN GRAY- Автор вопроса
Владимир Гришин
В одномерном случае все хорошо и быстро, но предст...

Что имеется ввиду под одномерным в случае индексов ? Ну если у тебя составной индекс по (field1,field2), то запрос where field1=… and field2=… должен работать быстро Найдет записи сразу по первому полю, а из них Найдет по второму

DORIAN GRAY
Так сложность заключается не в том, что по двум па...

Ваши сложности заключаются в том, что Вы не даёте себе труда подумать пару минут, уж извините. Если Вы собираетесь работать с СУБД — у Вас ещё немало будет подобных вопросов, а простое представление дало бы Вам ответы на большинство из них. "Знание одного принципа заменяет тысячу фактов" и т.п.

DORIAN GRAY
Что имеется ввиду под одномерным в случае индексов...

Как найдет?:) попробуйте на бумажке нарисовать

Если Вам не нравится аналогия с алфавитным указателем — та, что с отсортированным массивом и бинарным поиском, ничуть не хуже. Т.е. индекс по (field1,field2) по сути эквивалентен массиву, отсортированному по (мульти)ключу (field1,field2).

DORIAN GRAY- Автор вопроса
Yaroslav Schekin
Если Вам не нравится аналогия с алфавитным указате...

Мне нравится аналогия, но я видно ее не понял. Отыскать значения с фамилией начинающиеся на букву от В до Г это сложно ? Я не знаю как там будет бегать этот указатель по дереву, но мне кажется он найдет сразу уровень на котором будет левая граница. Дальше надо найти где правая граница. Тут конечно может придется начинать бежать с начала

DORIAN GRAY
Мне нравится аналогия, но я видно ее не понял. Оты...

Да какие деревья?! ;) Вы в жизни видели телефонный справочник (бумажный такой, там где абоненты отсортированы по фамилии, а потом по имени, и ещё есть "закладки" с первыми буквами фамилий, хотя бы)? Или предметный указатель в книге, вот такой? Попробуйте представить, как бы Вы чем-то из этого пользовались для поиска ответов на свои запросы.

DORIAN GRAY- Автор вопроса
Yaroslav Schekin
screenshot Да какие деревья?! ;) Вы в жизни видели телефонный...

Ну тут да, придется просто бежать по всем значениям в диапазоне, чтобы собрать индексы.

DORIAN GRAY
Ну тут да, придется просто бежать по всем значения...

Ну так b-tree индексы по сути работают аналогично — в этом примере легко найти все страницы по первому ключу (от "Теорема" до "Тип", например), а вот найти что-нибудь по второму (например, "логический/ая" — куда сложнее).

Похожие вопросы

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
95
читать файл максимально быстро? странный вопрос))
zamtmn
53
How to create an OS in C? what to study?
Linus
18
Всем доброго вечера! Хочу поделиться своим злоключением с человеком, который, как оказалось сюда тоже скидывал свое резюме. Жаль, что я вашу группу не нашел раньше… человек ки...
Роман Ахмедзянов
4
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
Вопрос вроде правильно, но что надо сделать, чтоб текст был виден нормально ? ghci> TE.decodeUtf8 $ TE.encodeUtf8 "test - проба" "test - \1087\1088\1086\1073\1072"
Fedor
7
а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
@HemulGM Параметры у AddStream поменялись? Несостыковка какая-то
Катерина Свиридова
12
Карта сайта