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

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

18
задан webnat0 7 March 2011 в 10:33
поделиться

7 ответов

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

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

19
ответ дан 30 November 2019 в 07:03
поделиться

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

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

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

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

0
ответ дан 30 November 2019 в 07:03
поделиться

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

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

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

1
ответ дан 30 November 2019 в 07:03
поделиться

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

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

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

0
ответ дан 30 November 2019 в 07:03
поделиться

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

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

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

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

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

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

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

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

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

16
ответ дан 30 November 2019 в 07:03
поделиться

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

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

5
ответ дан 30 November 2019 в 07:03
поделиться

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

0
ответ дан 30 November 2019 в 07:03
поделиться
Другие вопросы по тегам:

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