Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Для чего предназначены Index-ы в базе данных?
 
 автор: Адоп Акробат   (03.10.2004 в 04:22)   письмо автору
 
 

Извините за тупой вопрос, просто в книге я чего-то не понял?
И как они устанавливаются?

   
 
 автор: cheops   (03.10.2004 в 11:46)   письмо автору
 
   для: Адоп Акробат   (03.10.2004 в 04:22)
 

Инедксирование столбца - это по сути создание копии этого столбца. Поэтому чем больше индексов в таблице, тем быстрее увеличивеется её размер. Эта копия всегда поддерживается в отсортированном состоянии, т.е. даже при добавлении новой записи - индекс всё равно будет в отсортированном состоянии. Наличие индекса приводит к значительному ускорению выборки по индексированным столбцам (особенно если столбец присутствует в выражении WHERE), так как база данных заранее "знает" где находится нужное значение и ей не требуется сканировать всю таблицу. В тоже время замедляются операции связанные с изменением таблицы (INSERT, DELETE...), так как такие операции приводят к необходимости сортировки индекса. Поэтому часто при добавлении первоначально больших объёмов данных рекоммендуется создавать индексы после заполнения базы данных.

Больше двух столбцов индексировать не стоит (лучше если это будут первичные и вторичные ключи, часто используемые в выражении WHERE).

Создать индекс можно при создании самой таблицы
CREATE TABLE avto_direction (
  id_direction int(11) NOT NULL auto_increment,
  id_point int(11) NOT NULL default '0',
  PRIMARY KEY  (id_direction),
  INDEX id_point (id_point)
) TYPE=MyISAM;

В этой таблицы 2 столбца и 2 индекса id_direction - это первичный ключ (первичный ключ всегда индексирован - PRIMARY KEY) и индекс id_point для оставшегося столбца - id_point (имя индекса и столбца не обязательно должны совпадать). Для создания уникального индекса (каждая запись должна иметь уникальное значение не совпадающее со значениями других записей) вместро INDEX следует использовать ключевое слово UNIQUE.
Создать индекс в уже существующей таблице можно при помощи оператора CREATE:
CREATE INDEX index_name ON tbl_name (index_columns);
CREATE UNIQUE INDEX index_name ON tbl_name (index_columns);

где index_name, tbl_name и index_columns являются именем индекса, таблицы и индексируемый столбец, соответсвенно.

PS Особняком стоит индекс FULLTEXT, позволяющий производить полнотекстовый поиск по таблице.

http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=148

   
 
 автор: Адоп Акробат   (03.10.2004 в 14:58)   письмо автору
 
   для: cheops   (03.10.2004 в 11:46)
 

Благодарю!!! :)

   
 
 автор: Адоп Акробат   (04.10.2004 в 05:21)   письмо автору
 
   для: cheops   (03.10.2004 в 11:46)
 

А index на тип столбца mediumtext можно поставит?

   
 
 автор: cheops   (04.10.2004 в 09:40)   письмо автору
 
   для: Адоп Акробат   (04.10.2004 в 05:21)
 

Ну... назначить индекс FULLTEXT для полнотекстового поиска можно, а обычным индексом для стлбцов TEXT и BLOB воспользоваться нельзя. Можно индексировать CHAR, но только лучше не полностью а первые 10-15 символов
CREATE TABLE indextable
{
  name CHAR(255),
  INDEX (name(10))
}

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования