Как работает индексация базы данных?

Учитывая, что индексирование так важно, поскольку ваш набор данных увеличивается в размере, может ли кто-нибудь объяснить, как индексирование работает на уровне, не зависящем от базы данных?

Информацию о запросах для индексации поля см. В Как индексировать столбец базы данных.

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2 541
0
913 828
6

Ответы 6

Когда я впервые прочитал это, мне это очень помогло. Спасибо.

С тех пор я получил некоторое представление о недостатках создания индексов: если вы пишете в таблицу (UPDATE или INSERT) с одним индексом, у вас фактически две операции записи в файловой системе. Один для данных таблицы, а другой - для данных индекса (и их пересортировка (и - если кластеризована - пересортировка данных таблицы)). Если таблица и индекс расположены на одном жестком диске, это требует больше времени. Таким образом, таблица без индекса (куча) позволит быстрее выполнять операции записи. (если бы у вас было два индекса, вы бы получили три операции записи и т. д.)

Однако определение двух разных мест на двух разных жестких дисках для данных индекса и данных таблиц может уменьшить / устранить проблему увеличения затрат времени. Это требует определения дополнительных групп файлов с соответствующими файлами на желаемых жестких дисках и определения местоположения таблицы / индекса по желанию.

Еще одна проблема с индексами - их фрагментация с течением времени при вставке данных. REORGANIZE помогает, вы должны написать процедуры, чтобы это сделать.

В определенных сценариях куча более полезна, чем таблица с индексами,

например: - Если у вас много конкурирующих записей, но только одно чтение в ночное время в нерабочее время для отчетности.

Кроме того, очень важно различать кластерные и некластеризованные индексы.

Мне помогло: - Что на самом деле означают кластерный и некластеризованный индекс?

Я думаю, что эти проблемы с индексацией можно решить, поддерживая две разные базы данных, такие как Master и Slave. Где Master может использоваться для вставки или обновления записей. Без индексации. И раб можно использовать для чтения с правильной индексацией правильно ???

bharatesh 23.05.2014 13:51

нет, не так, извините. необходимо обновлять не только содержимое таблиц, но также структуру и содержимое индекса (b-дерево, узлы). ваша концепция хозяина и раба здесь не имеет смысла. что может быть осуществимо, так это репликация или зеркальное отображение на вторую базу данных, в которой выполняется аналитика, чтобы убрать эту рабочую нагрузку с первой базы данных. эта вторая база данных будет содержать копии индексов данных и для этих данных.

Der U 29.05.2014 20:11

Я ...! Постарайтесь прочитать мой комментарий и понять его правильно. Я также сказал то же самое, я назвал главный и подчиненный (что угодно) «эпликацией или зеркальным отображением второй базы данных, в которой выполняется аналитика, чтобы убрать эту рабочую нагрузку с первой базы данных. Эта вторая база данных будет содержать копии данных и индексы на эти данные "

bharatesh 02.06.2014 15:04

вторая база данных - для которой выполняется зеркальное отображение или репликация, подчиненная - испытает все манипуляции с данными, как и первая. с каждой dml-операцией индексы этой второй базы данных будут испытывать «эти проблемы с индексированием». Я не вижу выгоды в этом, там, где индексы нужны и созданы для быстрого анализа, их нужно поддерживать в актуальном состоянии.

Der U 03.06.2014 17:23

Индекс - это просто структура данных, которая ускоряет поиск определенного столбца в базе данных. Эта структура обычно представляет собой b-дерево или хеш-таблицу, но может быть любой другой логической структурой.

+1 раз на миллион за этот ответ, поскольку я нашел этот список, пытаясь найти простое объяснение, что такое индексирование.

Josh Burson 23.06.2015 02:06

Отметим, что «просто структура данных» не означает «дополнение к данным». Иногда это так (например, «некластеризованный индекс»), иногда он определяет структуру данных (например, «кластеризованный индекс»).

Pablo H 28.08.2019 16:24

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

Это комментарий, а не ответ.

RonJohn 25.07.2018 00:37

Это более заметно и, следовательно, более полезно, поскольку это общее замечание. К какому ответу следует добавить это в качестве комментария?

pfabri 23.03.2019 22:16

наверное комментарий к OP

Guy 24.09.2019 19:47

Простое описание!

Индекс - это не что иное, как структура данных хранит значения для определенного столбца в таблице. Индекс создается по столбцу таблицы.

Пример: у нас есть таблица базы данных User с тремя столбцами - Name, Age и Address. Предположим, что таблица User содержит тысячи строк.

Теперь предположим, что мы хотим запустить запрос, чтобы найти все сведения обо всех пользователях с именем «Джон». Если мы запустим следующий запрос:

SELECT * FROM User 
WHERE Name = 'John'

Программное обеспечение базы данных должно буквально просматривать каждую строку в таблице User, чтобы увидеть, является ли Name для этой строки «John». Это займет много времени.

Здесь нам помогает index: index используется для ускорения поисковых запросов, существенно сокращая количество записей / строк в таблице, которые необходимо изучить..

Как создать индекс:

CREATE INDEX name_index
ON User (Name)

index состоит из значения столбцов (например, John) из одной таблицы, и эти значения хранятся в структура данных.

So now the database will use the index to find employees named John because the index will presumably be sorted alphabetically by the Users name. And, because it is sorted, it means searching for a name is a lot faster because all names starting with a “J” will be right next to each other in the index!

Индекс не подразумевает порядок сортировки в столбце

oligofren 15.02.2019 16:26

Спасибо. Это помогло мне понять. Таким образом, в основном индекс - это копия данных столбца, которые были отсортированы. Обычно данные столбца находятся в том порядке, в котором они были вставлены.

Neil 01.05.2019 13:30

Означает ли это, что внутри для каждого имени ведется отдельная таблица, например, Name = John имеет свою собственную таблицу

Ani 27.10.2020 11:22

«Индекс - это не что иное, как структура данных, в которой хранятся значения определенного столбца в таблице» - почему вы так говорите? Я не думаю, что ценности достаточно; вместо этого он должен был бы сохранить ссылку на строку / запись в таблице. Если у меня есть таблица с 10 столбцами, и один из них - COUNTRY_CODE, индекс не может просто хранить значения COUNTRY_CODE, ему придется хранить ссылку на строки таблицы. В противном случае, если вы выполните ВЫБОР другого столбца, но присоединитесь / выберете на COUNTRY_CODE, вы не сможете использовать только значения COUNTRY_CODE.

Jason S 13.11.2020 00:49

Просто подумайте о Database Index как об указателе книги.

Если у вас есть книга о собаках и вы хотите найти информацию, скажем, о немецких овчарках, вы, конечно, можете пролистать все страницы книги и найти то, что ищете, но это, конечно, отнимает много времени, а не очень быстро.

Другой вариант заключается в том, что вы можете просто перейти к разделу указателя книги и затем найти то, что ищете, используя имя объекта, который вы ищете (в данном случае, немецкие овчарки), а также посмотрев номер страницы, чтобы быстро найди то, что ищешь.

В базе данных номер страницы называется указателем, который направляет базу данных на адрес на диске, где находится объект. Используя ту же аналогию с немецкой овчаркой, мы могли бы получить что-то вроде этого («German Shepherd», 0x77129), где 0x77129 - это адрес на диске, где хранятся данные строки для немецкой овчарки.

Короче говоря, индекс - это структура данных, которая хранит значения для определенного столбца в таблице, чтобы ускорить поиск запроса.

Классический пример «Указатель в книгах»

Рассмотрим «Книгу» из 1000 страниц, разделенную на 10 глав, каждый раздел по 100 страниц.

Все просто, да?

Теперь представьте, что вы хотите найти конкретную главу, которая содержит слово «Алхимик». Без индексной страницы у вас нет другого выбора, кроме как сканировать всю книгу / главы. то есть: 1000 страниц.

Эта аналогия известна как «Полное сканирование таблицы» в мире баз данных.

Но с индексной страницей вы знаете, куда идти! И более того, чтобы найти какую-либо конкретную важную главу, вам просто нужно каждый раз просматривать индексную страницу снова и снова. Найдя соответствующий индекс, вы можете быстро перейти к этой главе, пропустив остальные.

Но тогда, помимо фактических 1000 страниц, вам понадобится еще ~ 10 страниц для отображения индексов, то есть всего 1010 страниц.

Thus, the index is a separate section that stores values of indexed column + pointer to the indexed row in a sorted order for efficient look-ups.

В школах все просто, не правда ли? :П

действительно хорошая аналогия! забавно, я не установил связь между указателем книг и указателем БД

Yolo Voe 12.07.2018 01:22

Это наводит меня на мысль: Library или Grocery Store. Не могли бы вы представить себе, что в продуктовом магазине нет индекса? Where's The Beef?!? Oh its next to the Restrooms, a mop, and makeup

JayRizzo 04.09.2018 10:00

«Но с индексной страницей в начале вы там». Что значит «ты там»?

Frisbetarian 13.09.2018 13:48

Указатели обычно идут в конце книг, а оглавление - впереди. Но это делает аналогию еще лучше, поскольку порядок столбцов не имеет значения.

undrline - Reinstate Monica 09.07.2019 06:19

Другие вопросы по теме