Всем привет. Достаточно давно, когда я начал изучать создание БД, я узнал про индексы. Что они, ускоряют выборку из БД, но как она это делает, не знаю. В принципе, я вообще про них ничего не знаю(кроме того, что ускоряют выборку). В нете говорят, что индексы присваиваются тем полям, которые мы затрагиваем. По сути, все поля, которые есть в БД, мы трогаем каким либо образом. Выводим текст, ссылка на строку в другой таблице и т.д. То есть все поля не остаются без внимания, ибо они для этого и созданы. То есть индексы нужно присваивать абсолютно всем полям?
Другой вопрос. Каким типам полей, какие индексы присваивать? Я надыбал, что есть 4 типа индексов:
Цитата |
Неуникальный индекс - это индекс, в котором каждое индексное значение может встречаться несколько раз. Этот тип индексов объявляется с помощью ключевых слов INDEX или KEY. Индекс с уникальными значениями объявляется с помощью ключевого слова UNIQUE. Каждое из значений должно быть отлично от других (Исключение составляет значение NULL, которое может встречаться несколько раз). PRIMARY KEY (первичный ключ) - это так же индекс с уникальными значениями. Он подобный UNIQUE индексу, однако имеет дополнительные ограничения: Таблица может содержать несколько UNIQUE индексов, однако только один PRIMARY KEY UNIQUE индекс может содержать значения NULL, в то время как PRIMARY KEY не может их сожержать. FULLTEXT - полнотекстовый индекс, разработан специально для поиска по тексту. |
Я понял, что первичный ключ используют только для поля id в БД. То есть он всегда должен быть заполнен какими либо данными, они не должны повторяться, и если тип поля число, то MySQL запоминает предыдущее число, и при вставке следующей записи прибавляет на один больше. И понял про фулл текст. Он присваивается для полей, с большими текстами(то есть тип поля = TEXT). А вот остальные два типа не могу понять. И не могу понять, как проставлять индексы в PHPMYADMIN
FatCat
25.10.2014 - 14:52
Цитата (N0ob @ 24.10.2014 - 19:29) |
понял про фулл текст. Он присваивается для полей, с большими текстами(то есть тип поля = TEXT) |
... и поиск будет осуществляться только по целым словам; по части слова не найдёт.
Цитата (N0ob @ 24.10.2014 - 19:29) |
остальные два типа не могу понять |
Если очень упрощенно, индексировать нужно те поля, по которым из запроса мы планируем получать не одну строку, а несколько.
Например, дата сообщения на форуме; при запросе "активных" запрос ищет по дате больше даты прошлого визита.
Пример уникального у нас на форуме - идентификатор сессии в таблице сессий.
_____________
Бесплатному сыру в дырки не заглядывают...
FatCat
25.10.2014 - 14:56
Цитата (N0ob @ 24.10.2014 - 19:29) |
не могу понять, как проставлять индексы в PHPMYADMIN |

_____________
Бесплатному сыру в дырки не заглядывают...
Проблема в том, что у меня новая версия пхпадмина, но я порылся хорошенько, и нашел. Вчера весь вечер сидел, и искал статьи про индексы, и нашел одну, в которой более менее понятно объясняют. Вот немного расскажу, что понял(в скобках буду указывать типы полей, с которым работает этот индекс):
Primary Key(int)- используют(практически всегда) для id в таблице. Он всегда числового типа, не повторяется(уникален), и не равен null.
Unique(int) - можно использовать любое число. То есть допустим id юзера из другой таблицы, количество товара и т.д.
Index(все, кроме TEXT) - это обычное поле. тут можно использовать все. Дата, тот же, что и в Unique, имя, фамилия, город, сайт и т.д.
Full text(TEXT) - это огромный текст. Так же дает возможность использовать функции MATCH() и AGAINST().
Я правильно понял материал?
AllesKlar
25.10.2014 - 19:19
N0ob
Цитата (N0ob @ 25.10.2014 - 19:16) |
Я правильно понял материал? |
Не правильно.
Primary Key может быть составным индексом 2х и более столбцов, соответсвенно, он не обязан быть всегда числового типа, т.к. он вообще не скаляр
_____________
[продано копирайтерам]
AllesKlar понял косяк. А с остальным все правильно?
AllesKlar
25.10.2014 - 21:01
Unique может быть так же любого типа
Вон. кстати, у FatCat индекс joined состоит из 4х полей
_____________
[продано копирайтерам]
AllesKlar то есть Unique, это совершенно любое значение, главное что бы оно не повторялось в других записях. Так?
AllesKlar
26.10.2014 - 17:58
именно
_____________
[продано копирайтерам]
sergeiss
26.10.2014 - 21:58
Цитата (N0ob @ 24.10.2014 - 20:29) |
Что они, ускоряют выборку из БД, но как она это делает, не знаю. В принципе, я вообще про них ничего не знаю(кроме того, что ускоряют выборку). |
Вот представь, что у тебя в руках большой телефонный справочник определенног города. В бумажном виде. Страниц эдак 200. И там все телефоны написаны в произвольном порядке. Имеются данные: номер телефона, адрес, фамилия (+имя и отчество).
Вопрос: сколько страниц тебе придется просмотреть, чтобы найти какой-то определенный телефон? Ответ: от 1 до 200

А если тебе надо найти телефоны абонентов с определенной фамилией? Правильный ответ: все 200 страниц.
Что же делают, чтобы с таким справочником было удобно работать? Правильно, располагают инфу в определенном порядке. Лучше всего, если там будет, по сути, целых 3 справочника: с расположением по всем алфавиту по адресам, по алфавиту фамилии, по номеру телефона. Тогда ты сможешь быстро найти нужный тебе номер, зная адрес. Или найти адрес (или фамилию) по номеру телефона.
В данном случае были бы использованы как раз 3 индекса: по адресу, по фамилии, по номеру телефона.
При переносе в БД все эти принципы сохраняются. Зачем придумывать что-то новое, если алгоритм уже есть и отработан давным-давно, в те времена, когда компьютеров еще не было?
PS. Вопрос в тему

Сколько страниц тебе придется перелистнуть, чтобы найти нужную инфу? Предположим, что данные убираются на 200 страницах. Максимально - 8 страниц. Да еще не надо будет читать все данные на странице, только первую и последнюю запись странцы (это специфика бумажного носителя - можно так это назвать). Почему именно 8? Посчитай сам... Если не догадаешься, то подскажу.
_____________
*
Хэлп по PHP*
Описалово по JavaScript *
Хэлп и СУБД для PostgreSQL*
Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги. *
"накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)
sergeiss теперь более менее понятно. Я вот теперь сижу, полностью БД пересоздаю, теперь уже с индексами)
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.