[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Индексы
N0ob
Всем привет. Достаточно давно, когда я начал изучать создание БД, я узнал про индексы. Что они, ускоряют выборку из БД, но как она это делает, не знаю. В принципе, я вообще про них ничего не знаю(кроме того, что ускоряют выборку). В нете говорят, что индексы присваиваются тем полям, которые мы затрагиваем. По сути, все поля, которые есть в БД, мы трогаем каким либо образом. Выводим текст, ссылка на строку в другой таблице и т.д. То есть все поля не остаются без внимания, ибо они для этого и созданы. То есть индексы нужно присваивать абсолютно всем полям?

Другой вопрос. Каким типам полей, какие индексы присваивать? Я надыбал, что есть 4 типа индексов:
Цитата
Неуникальный индекс - это индекс, в котором каждое индексное значение может встречаться несколько раз. Этот тип индексов объявляется с помощью ключевых слов INDEX или KEY.
Индекс с уникальными значениями объявляется с помощью ключевого слова UNIQUE. Каждое из значений должно быть отлично от других (Исключение составляет значение NULL, которое может встречаться несколько раз).
PRIMARY KEY (первичный ключ) - это так же индекс с уникальными значениями. Он подобный UNIQUE индексу, однако имеет дополнительные ограничения:
Таблица может содержать несколько UNIQUE индексов, однако только один PRIMARY KEY
UNIQUE индекс может содержать значения NULL, в то время как PRIMARY KEY не может их сожержать.
FULLTEXT - полнотекстовый индекс, разработан специально для поиска по тексту.

Я понял, что первичный ключ используют только для поля id в БД. То есть он всегда должен быть заполнен какими либо данными, они не должны повторяться, и если тип поля число, то MySQL запоминает предыдущее число, и при вставке следующей записи прибавляет на один больше. И понял про фулл текст. Он присваивается для полей, с большими текстами(то есть тип поля = TEXT). А вот остальные два типа не могу понять. И не могу понять, как проставлять индексы в PHPMYADMIN
FatCat
Цитата (N0ob @ 24.10.2014 - 19:29)
понял про фулл текст. Он присваивается для полей, с большими текстами(то есть тип поля = TEXT)

... и поиск будет осуществляться только по целым словам; по части слова не найдёт.


Цитата (N0ob @ 24.10.2014 - 19:29)
остальные два типа не могу понять

Если очень упрощенно, индексировать нужно те поля, по которым из запроса мы планируем получать не одну строку, а несколько.
Например, дата сообщения на форуме; при запросе "активных" запрос ищет по дате больше даты прошлого визита.

Пример уникального у нас на форуме - идентификатор сессии в таблице сессий.

_____________
Бесплатному сыру в дырки не заглядывают...
FatCat
Цитата (N0ob @ 24.10.2014 - 19:29)
не могу понять, как проставлять индексы в PHPMYADMIN

user posted image



user posted image

_____________
Бесплатному сыру в дырки не заглядывают...
N0ob
Проблема в том, что у меня новая версия пхпадмина, но я порылся хорошенько, и нашел. Вчера весь вечер сидел, и искал статьи про индексы, и нашел одну, в которой более менее понятно объясняют. Вот немного расскажу, что понял(в скобках буду указывать типы полей, с которым работает этот индекс):

Primary Key(int)- используют(практически всегда) для id в таблице. Он всегда числового типа, не повторяется(уникален), и не равен null.
Unique(int) - можно использовать любое число. То есть допустим id юзера из другой таблицы, количество товара и т.д.
Index(все, кроме TEXT) - это обычное поле. тут можно использовать все. Дата, тот же, что и в Unique, имя, фамилия, город, сайт и т.д.
Full text(TEXT) - это огромный текст. Так же дает возможность использовать функции MATCH() и AGAINST().

Я правильно понял материал?
AllesKlar
N0ob
Цитата (N0ob @ 25.10.2014 - 19:16)
Я правильно понял материал?

Не правильно.
Primary Key может быть составным индексом 2х и более столбцов, соответсвенно, он не обязан быть всегда числового типа, т.к. он вообще не скаляр

_____________
[продано копирайтерам]
N0ob
AllesKlar понял косяк. А с остальным все правильно?
AllesKlar
Unique может быть так же любого типа
Вон. кстати, у FatCat индекс joined состоит из 4х полей

_____________
[продано копирайтерам]
N0ob
AllesKlar то есть Unique, это совершенно любое значение, главное что бы оно не повторялось в других записях. Так?
AllesKlar
именно

_____________
[продано копирайтерам]
sergeiss
Цитата (N0ob @ 24.10.2014 - 20:29)
Что они, ускоряют выборку из БД, но как она это делает, не знаю. В принципе, я вообще про них ничего не знаю(кроме того, что ускоряют выборку).

Вот представь, что у тебя в руках большой телефонный справочник определенног города. В бумажном виде. Страниц эдак 200. И там все телефоны написаны в произвольном порядке. Имеются данные: номер телефона, адрес, фамилия (+имя и отчество).
Вопрос: сколько страниц тебе придется просмотреть, чтобы найти какой-то определенный телефон? Ответ: от 1 до 200 smile.gif
А если тебе надо найти телефоны абонентов с определенной фамилией? Правильный ответ: все 200 страниц.

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

При переносе в БД все эти принципы сохраняются. Зачем придумывать что-то новое, если алгоритм уже есть и отработан давным-давно, в те времена, когда компьютеров еще не было?

PS. Вопрос в тему smile.gif Сколько страниц тебе придется перелистнуть, чтобы найти нужную инфу? Предположим, что данные убираются на 200 страницах. Максимально - 8 страниц. Да еще не надо будет читать все данные на странице, только первую и последнюю запись странцы (это специфика бумажного носителя - можно так это назвать). Почему именно 8? Посчитай сам... Если не догадаешься, то подскажу.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
N0ob
sergeiss теперь более менее понятно. Я вот теперь сижу, полностью БД пересоздаю, теперь уже с индексами)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.