Что такое индекс? - PullRequest
       20

Что такое индекс?

17 голосов
/ 08 апреля 2010

Что такое индекс в MySQL ????

Ответы [ 7 ]

18 голосов
/ 08 апреля 2010

Индексы ускоряют запросы SELECT, потому что индексы сортируются по определению.Кроме того, индекс UNIQUE налагает ограничение на то, что значение этого столбца (или комбинация значений связанных столбцов) существует только один раз (то же самое относится к PRIMARY, но PRIMARY может существовать только один раз для каждой таблицы в отличие от ключа UNIQUE).*

Индексы - это компромисс: они чрезвычайно ускоряют запросы SELECT (когда используемые столбцы имеют индекс INDEX), но при этом таблица MySQL занимает больше места и стоит больше времени при изменении таблицы с помощью INSERT / UPDATE / DELETE.

16 голосов
/ 08 апреля 2010

Указатели похожи на указатель книги. Представьте, что у вас есть книга рецептов, и вы хотите узнать, как приготовить омлет, просто перейдите назад, найдите слово и номер его страницы и перейдите к этому номеру страницы. А теперь представьте, что у вас нет индекса, и вам пришлось искать по 400 страницам рецептов, какой кошмар!

Индексы имеют несколько типов Первичный ключ, Индекс, Уникальный, Полный текст

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

Индексы считаются вашими вторичными первичными ключами, они помещаются в поля, которые вы хотите быстро найти.

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

Наконец, Fulltext - это специальный индекс, используемый только механизмом хранения MyISAM mysql, он используется для поиска в ваших записях с использованием человеческих фраз. не вдаваясь в подробности своей поисковой системы mysqls, более продвинутую версию команды LIKE sql.

Например, если я искал 'яйца с маслом', полный текст будет искать записи, содержащие яйца, масло или оба. где LIKE просто будет искать строки, содержащие «яйца и масло»

Надеюсь, это поможет, на сайте mysql есть достаточно информации по этому вопросу, но это дает вам общее представление об этом.

Удачного кодирования:)

5 голосов
/ 08 апреля 2010

Индексы используются для двух вещей:

  1. Укажите поле (или поля), которое однозначно идентифицирует строку (первичный ключ).
  2. Экономия времени при поиске часто используемых полей. Например, если вы часто просматриваете пользователей по их именам, вам следует добавить индекс для столбца имени пользователя.

Подробнее об индексах читайте здесь http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html или лучше купите подходящие книги по дизайну баз данных.

Относительно вашего второго вопроса, посмотрите на это http://dev.mysql.com/doc/refman/5.0/en/string-type-overview.html.

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

Кроме того, вы не можете использовать индекс TEXT по причинам, указанным выше, поэтому не рекомендуется использовать его в качестве поля поиска.

1 голос
/ 08 апреля 2010

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

Использование TEXT в тех случаях, когда вам это не нужно, плохо. Для некоторых полей лучше ограничить пользователей, т. Е. title и url , поскольку у вас есть индекс по URL. И я не думаю, что вы можете использовать индекс для столбцов типа TEXT. Я не думаю, что FULLTEXT -индекс для url - это то, что вы хотите.

Я бы порекомендовал вам прочитать о базах данных во вступительном тексте или на веб-сайте.

0 голосов
/ 08 апреля 2010

Если вы знаете, что у каждого есть уникальный номер социального страхования (SSN), вы можете создать индекс имени каждого человека, заказанный SSN. Затем, если вам дали чей-либо SSN, было бы очень быстро найти его имя.

Теперь предположим, что у вас есть папка manilla для каждого человека. На карте могут быть подробные медицинские записи и т. Д. Ваша база данных может не содержать эти карты в порядке - возможно, она просто добавляет новые папки в конец компактного диска. Но он сохраняет отсортированный «индекс», поэтому, если вы посмотрите SSN, он может точно сказать, где хранится соответствующая папка.

В этом примере SSN используется в качестве первичного ключа. Хорошо, если он уникален, но даже если он не уникален, он все равно может ускорить процесс.

0 голосов
/ 08 апреля 2010

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

0 голосов
/ 08 апреля 2010

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

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

Существуют также два разных типа индексов.Кластерные и некластерные индексы.Если я не ошибаюсь, в MySQL первичные ключи кластеризованы, а все остальные индексы не кластеризованы.Хорошая вводная статья о разнице: здесь .Он охватывает SQL Server, но концепция должна быть такой же.

Я мало работал с MySQL, но из того, что я вижу в Интернете, FULLTEXT предоставляет способ поиска с использованием полнотекстового поиска на естественном языке.По сути, в запросе вы будете предоставлять термины для поиска по полнотекстовым индексированным столбцам, и он отзовет все результаты.Вот несколько статей на эту тему, которые вы можете найти полезными. Документы MySQL по полнотекстовому поиску Статья 1 Статья 2

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...