Spec-Zone.ru › MariaDB

Основные принципы индексов

Представьте, что у вас есть таблица со следующими строками (эта таблица используется в учебнике Более сложные соединения).

+----+------------+-----------+-------------------------+---------------------------+--------------+
| ID | First_Name | Last_Name | Position                | Home_Address              | Home_Phone   |
+----+------------+-----------+-------------------------+---------------------------+--------------+
|  1 | Mustapha   | Mond      | Chief Executive Officer | 692 Promiscuous Plaza     | 326-555-3492 |
|  2 | Henry      | Foster    | Store Manager           | 314 Savage Circle         | 326-555-3847 |
|  3 | Bernard    | Marx      | Cashier                 | 1240 Ambient Avenue       | 326-555-8456 |
|  4 | Lenina     | Crowne    | Cashier                 | 281 Bumblepuppy Boulevard | 328-555-2349 |
|  5 | Fanny      | Crowne    | Restocker               | 1023 Bokanovsky Lane      | 326-555-6329 |
|  6 | Helmholtz  | Watson    | Janitor                 | 944 Soma Court            | 329-555-2478 |
+----+------------+-----------+-------------------------+---------------------------+--------------+

Теперь представьте, что вам нужно получить домашний телефон Фэнни Кроун. Без индексов единственный способ сделать это — пройтись по каждой строке, пока не найдётся совпадение по имени и фамилии. Теперь представьте, что у вас миллионы записей, и вы понимаете, что даже для быстрого сервера базы данных это очень неэффективно.

Ответ — отсортировать записи. Если они были отсортированы по фамилии в алфавитном порядке, даже человек мог бы быстро найти запись среди большого количества. Но мы не можем отсортировать всю запись по фамилии. Что, если мы хотим найти запись по ID или по имени? Ответ — создать отдельные индексы для каждого столбца, по которому мы хотим сортировать. Индекс просто содержит отсортированные данные (например, фамилию) и ссылку на исходную запись.

Например, индекс по Last_Name:

+-----------+----+
| Last_Name | ID |
+-----------+----+
| Crowne    |  4 |
| Crowne    |  5 |
| Foster    |  2 |
| Marx      |  3 |
| Mond      |  1 |
| Watson    |  6 |
+-----------+----+

и индекс по Position

+-------------------------+----+
| Position                | ID |
+-------------------------+----+
| Cashier                 |  3 |
| Cashier                 |  4 |
| Chief Executive Officer |  1 |
| Janitor                 |  6 |
| Restocker               |  5 |
| Store Manager           |  2 |
+-------------------------+----+

позволят вам быстро найти номера телефонов всех кассиров или номер телефона сотрудника с фамилией Маркс.

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

Дополнительную информацию см. в разделах СОЗДАТЬ ИНДЕКС и Начало работы с индексами.

Содержимое, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают мнения MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/the-essentials-of-an-index/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API