2010-04-08 3 views

ответ

18

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

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

+15

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

+0

Поздравляем @Rob за то, что вы единственный, кто здесь говорит о том, что такое индекс в условиях laymans. – CResults

+1

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

0

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

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

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

Я не много работал с MySQL, но из того, что я могу видеть в Интернете, FULLTEXT предоставляет способ поиска с использованием полнотекстового поиска на естественном языке. В основном, в запросе вы предоставите условия для поиска столбца с полным индексированием текста, и он отбросит все результаты. Вот несколько статей, которые я нашел по теме, которые могут вам пригодиться.
MySQL Docs on Full Text Search
Article 1
Article 2

5

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

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

0

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

1

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

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

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

0

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

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

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

16

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

Индексы имеют несколько типов Primary Key, Index, уникальные полнотекстовые

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

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

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

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

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

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

Счастливое кодирование:

Смежные вопросы