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 :: что такое индексаця для таблиц

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
dadli
Отправлено: 16 Августа, 2011 - 11:20:07
Post Id



Посетитель


Покинул форум
Сообщений всего: 416
Дата рег-ции: Май 2011  
Откуда: тифилис


Помог: 5 раз(а)




приветствую всем, естъ вопрос о индексации таблиц.

здес http://mysql[dot]ru/docs/gruber/mg17[dot]html читал


Цитата:
Предположим что наша таблица Заказчиков имеет тысячи входов, а вы хотите
найти заказчика с номером=2999. Так как строки не упорядочены, ваша
программа будет просматривать всю таблицу, строку за строкой, проверяя
каждый раз значение поля cnum на равенство значению 2999. Однако, если
бы имелся индекс в поле cnum , то программа могла бы выйти на номер
2999 прямо по индексу и дать информацию о том как найти правильную
строку таблицы.




ну допустим что ето таблица содержит 8000 строку, и у него естъ что то такого вида:

cnum | name |
------------------
1 | john |
2 | jimmy |
3 | billy |
...................... |
...................... |
2999 | jack |
...................... |
...................... |
8000 | tom |


ну вот я не понимаю, что такое ето индекс, что с помошю им, програма может наити прямо на строку где cnum = 2999, если он не будитъ проверятъ другие значении поле cnum-а

ето запрос:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `name` FROM `sometable` WHERE `cnum` = 2999


я так понимаю:
програма проверяет первое значение поле cnum - если ето значение не 2999, то програма проверяет втарое значение поле cnum.... и так далее до момента когда програма не наидиот значение - 2999


а говарят что если ми индексируем поле cnum, програма уже будетъ с помошю ето индекса, прямо наити поле cnum где он павно 2999, а как ето происходит не понимаю,
вот мои вопрос:
что такое ето индекс, что с помошю им, програма может наити нужное значение, без проверки других значении ?

ну если пиняли мои вопрос отвечаите пожалуиста, я очен хочу понят сутъ етого индекса и не хочу исползоватъ его слепо.
спасибо.
 
 Top
EuGen Администратор
Отправлено: 16 Августа, 2011 - 11:33:54
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




Суть в том, что индекс - специальная структура, которая предназначена для ускорения поиска. Устройство этой структуры может быть разным, но все они призваны облегчить задачу поиска.
Простой пример - Вам надо найти в словаре перевод слова на китайский язык. Представим себе, что слова в словаре записаны просто так, как пришлось. Для того, чтобы найти нужное слово и его перевод, в этом случае Вам потребовалось бы пролистывать страницу за страницей в надежде найти нужное слово. Это в среднем отнимет у Вас столько времени, сколько требуется для просмотра половины словаря.
А теперь представим, что словарь составлен не как попало, а имеет разбиение по буквам и буквы эти большим шрифтом написаны. В этом случае Вы уже откроете словарь на нужной букве и довольно быстро найдете слово. Если же внутри каждой первой буквы есть еще подобное разбиение по второй букве, то Вы найдете слово практически мгновенно.
Индексация устроена похожим образом (то есть строятся древовидные структуры для поиска), значительно ускоряя процесс отыскивания нужного значения.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
dadli
Отправлено: 16 Августа, 2011 - 12:17:12
Post Id



Посетитель


Покинул форум
Сообщений всего: 416
Дата рег-ции: Май 2011  
Откуда: тифилис


Помог: 5 раз(а)




EuGen
спасибо за подробнои ответ и понятно што индекс, ето для ускорении поска но абясните пожалуиста на етом примере:
естъ дяпазон 1 - 8000,
нужна наити число 2999,

как работает в етом случе програма ?
смотрит диапазон 1 - 8000 , если первои цифр числа не 2, програма их (числи которие не 2 начинается) игнорирует,
если первии цифр 2, потом смотрит втарое цифр и игнорирует все, у которих второи цифр не 9
если втарои цифр 9, смотрит третии цифр....и так далее пока не наидиот нужное значеня
ето так происходит? или как то другом

(Отредактировано автором: 16 Августа, 2011 - 12:17:52)

 
 Top
prog90
Отправлено: 17 Августа, 2011 - 18:20:56
Post Id


Гость


Покинул форум
Сообщений всего: 78
Дата рег-ции: Авг. 2011  


Помог: 0 раз(а)




А почему подсистемы isam и innodb сразу не хранят строки в таком упорядоченном виде, т.е. индексами? Почему нужно самому каждый раз указывать, чтобы подсистема создала индекс?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB