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

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

7 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

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

  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 по причинам, указанным выше, поэтому не рекомендуется использовать его в качестве поля поиска.

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

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

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

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

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

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

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

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

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

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

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

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