Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: что такое индексаця для таблиц
Предположим что наша таблица Заказчиков имеет тысячи входов, а вы хотите
найти заказчика с номером=2999. Так как строки не упорядочены, ваша
программа будет просматривать всю таблицу, строку за строкой, проверяя
каждый раз значение поля cnum на равенство значению 2999. Однако, если
бы имелся индекс в поле cnum , то программа могла бы выйти на номер
2999 прямо по индексу и дать информацию о том как найти правильную
строку таблицы.
ну допустим что ето таблица содержит 8000 строку, и у него естъ что то такого вида:
cnum | name |
------------------
1 | john |
2 | jimmy |
3 | billy |
...................... |
...................... |
2999 | jack |
...................... |
...................... |
8000 | tom |
ну вот я не понимаю, что такое ето индекс, что с помошю им, програма может наити прямо на строку где cnum = 2999, если он не будитъ проверятъ другие значении поле cnum-а
я так понимаю:
програма проверяет первое значение поле cnum - если ето значение не 2999, то програма проверяет втарое значение поле cnum.... и так далее до момента когда програма не наидиот значение - 2999
а говарят что если ми индексируем поле cnum, програма уже будетъ с помошю ето индекса, прямо наити поле cnum где он павно 2999, а как ето происходит не понимаю,
вот мои вопрос:
что такое ето индекс, что с помошю им, програма может наити нужное значение, без проверки других значении ?
ну если пиняли мои вопрос отвечаите пожалуиста, я очен хочу понят сутъ етого индекса и не хочу исползоватъ его слепо.
спасибо.
EuGen
Отправлено: 16 Августа, 2011 - 11:33:54
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Суть в том, что индекс - специальная структура, которая предназначена для ускорения поиска. Устройство этой структуры может быть разным, но все они призваны облегчить задачу поиска.
Простой пример - Вам надо найти в словаре перевод слова на китайский язык. Представим себе, что слова в словаре записаны просто так, как пришлось. Для того, чтобы найти нужное слово и его перевод, в этом случае Вам потребовалось бы пролистывать страницу за страницей в надежде найти нужное слово. Это в среднем отнимет у Вас столько времени, сколько требуется для просмотра половины словаря.
А теперь представим, что словарь составлен не как попало, а имеет разбиение по буквам и буквы эти большим шрифтом написаны. В этом случае Вы уже откроете словарь на нужной букве и довольно быстро найдете слово. Если же внутри каждой первой буквы есть еще подобное разбиение по второй букве, то Вы найдете слово практически мгновенно.
Индексация устроена похожим образом (то есть строятся древовидные структуры для поиска), значительно ускоряя процесс отыскивания нужного значения.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
dadli
Отправлено: 16 Августа, 2011 - 12:17:12
Посетитель
Покинул форум
Сообщений всего: 416
Дата рег-ции: Май 2011 Откуда: тифилис
Помог: 5 раз(а)
EuGen
спасибо за подробнои ответ и понятно што индекс, ето для ускорении поска но абясните пожалуиста на етом примере:
естъ дяпазон 1 - 8000,
нужна наити число 2999,
как работает в етом случе програма ?
смотрит диапазон 1 - 8000 , если первои цифр числа не 2, програма их (числи которие не 2 начинается) игнорирует,
если первии цифр 2, потом смотрит втарое цифр и игнорирует все, у которих второи цифр не 9
если втарои цифр 9, смотрит третии цифр....и так далее пока не наидиот нужное значеня
ето так происходит? или как то другом
Покинул форум
Сообщений всего: 78
Дата рег-ции: Авг. 2011
Помог: 0 раз(а)
А почему подсистемы isam и innodb сразу не хранят строки в таком упорядоченном виде, т.е. индексами? Почему нужно самому каждый раз указывать, чтобы подсистема создала индекс?
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.