C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Индексы для баз данных, требуется консультация по индексам
vladislav
Отправлено: 03.05.2004, 10:55


Ученик-кочегар

Группа: Участник
Сообщений: 5



Помогите разобраться с индексами, я совсем запутался.

Я программированием занимаюсь исключительно для себя и всегда работал с БД напрямую без индексов. А сейчас решил попробовать, что это такое и с чем это едят.
Чесно говоряя я так до конца и не разобрался для чего они нужны. Но насколько понял для лучшей сохранности данных при сбое. Если не трудно подскажите или ссылочку какую киньте чтобы почитать.

Соответственно индекы (?вторичные) создаются только на ключевые поля, как я понял. Если их нет выдается ошибка что таблица не проиндексирована.
Отсюда вопрос, как отследить есть ли ключевые поля.
Ещё вопрос: Обойтись без них можно, но чем это чревато?

Ещё есть так называемые индексные файлы. Вот они как я понял нужны обязательно, но как их создать и как с ними работать незнаю.

Может быть про это где написано?

P.S. БД paradox.

olegenty
Отправлено: 03.05.2004, 12:07


Ветеран

Группа: Модератор
Сообщений: 2412



QUOTE

всегда работал с БД напрямую без индексов

напрямую не значит без индексов. тем более, что при наличии первичного ключа индекс по полям первичного ключа имеет место быть и рождается "без спроса" по факту создания первичного ключа.

QUOTE

Но насколько понял для лучшей сохранности данных при сбое.

совсем нет, они служат для ускорения выборки. помогает в случае, когда условие выборки определённым образом ложится на поля индекса. потому что без индексов при выборке просматриваются ВСЕ поля таблицы. а при наличии полезного индекса — лишь те, на которые указывает индекс. пример: выборка из таблицы в 1000000 записей... без индексов будет просмотрен (прокачан, профетчен) весь набор в 1000000 записей. при наличии индекса — сам и ндекс и те записи, на которые он укажет. в сотни раз быстрее работает. тут тебе очень не хватает теории. для начала почитай о реляционных базах данных. потом о конкретных СУБД. одна беда — не посоветую литературы.

QUOTE

Соответственно индекы (?вторичные) создаются только на ключевые поля, как я понял

нихрена не соответственно. нет понятия первичный и/или вторичный индекс. есть первичный ключ. по нему есть уникальный индекс. как правило по возрастанию значений ключевых полей. и все остальные другие индексы, которые ты создаёшь, руководствуясь логикой функциональности своего приложения. пример: телефонный справочник. первичный ключ, и по нему уникальный индекс — № телефона. но невредны индексы один по имени и один по адресу — для быстрого поиска по соответствующим полям, и один — по всем полям, для поиска по частям полей.

QUOTE

Отсюда вопрос, как отследить есть ли ключевые поля.

здрасьте, приехали. а кто, как ни ты, их назначил? ну а если нет, открывай своё средство администрирования БД и смотри. в твоём случае это, вероятнее всего, Database Desktop. он всю эту инфу отображает на ура.

QUOTE

Обойтись без них можно, но чем это чревато?

чревато в лучшем случае тормозами, а в худшем — аномалиями в твоей БД. об этом читай теорию реляционных БД и нормализацию в частности. практика показывает, что НФБК (нормальной формы Бейс-Кодда) за глаза достаточно, чтобы аномалий не было. аномалия — это неактуальность данных.

QUOTE

Ещё есть так называемые индексные файлы. Вот они как я понял нужны обязательно, но как их создать и как с ними работать незнаю.

наличие индексных файлов определяется наличием индексов и, на данный момент, только в плоских файл-серферных СУБД, к коим относятся Paradox и DBASE. в остальных случаях это очень сильно зависит от опций конкретной СУБД. работать с ними просто — пиши инструкции CREATE INDEX, ALTER INDEX, DROP INDEX... остальное движок BDE сделает за тебя. если же ты работаешь с компонентами прямого доступа к БД Paradox, то читай инфу по своим компонентам.

А вот ссылок по парадоксу у меня нет. Я с Interbase/Firebird/Yaffil и MS SQL дружу хорошо. Про парадокс могу только порассказать, но уж лучше книгу найди...
vladislav
Отправлено: 03.05.2004, 12:19


Ученик-кочегар

Группа: Участник
Сообщений: 5



QUOTE


QUOTE

Отсюда вопрос, как отследить есть ли ключевые поля.


QUOTE (olegenty @ 03/05/2004, 13:09)

здрасьте, приехали. а кто, как ни ты, их назначил? ну а если нет, открывай своё средство администрирования БД и смотри. в твоём случае это, вероятнее всего, Database Desktop. он всю эту инфу отображает на ура.



Всё это конечно хорошо, но если взять и грохнуть файл с ключами?

Отредактировано vladislav — 03/05/2004, 13:23
olegenty
Отправлено: 03.05.2004, 12:46


Ветеран

Группа: Модератор
Сообщений: 2412



не, не так, с индексом по ключу. инфа о ключе всё равно хранится в заголовке той таблицы, по которой был ключ. в Database Desctop зайди всё отутуда поправь... хотя "грохнулся" ... у меня за всю жизнь раз база падала. и я был счастлив, что в допромышленный период. на ошибках надо учиться. в идеале не более раза. пересоздай, и забудь слово "грохнулся".
vladislav
Отправлено: 03.05.2004, 13:03


Ученик-кочегар

Группа: Участник
Сообщений: 5



Спасибо за информацию.
Может удастся найти где нибудь книжки.
olegenty
Отправлено: 05.05.2004, 08:57


Ветеран

Группа: Модератор
Сообщений: 2412



через поисковые сайты поищи... инфы полно...

Вернуться в Вопросы программирования в C++Builder