Ускоряет выборку по индексному полю, но замедляет добавление новых записей. 1. Правильно? 2. Обновление не индексного поля такой таблицы будет проходить быстрее при наличии индекса в таблице?
1. Да. Но потери в скорости выборки при отсутствии индекса в принципе не сравнимы с потерями времени на запись индекса. Ибо индекс сам по себе «индексирован» сам собой. 2. Да. Будет выигрыш за счет времени поиска этой строки через индекс. Естественно, уникальные индексы - самые быстрые.
Перед добавлением большого числа записей эффективнее всего отключить перестройку индексов, а после добавления включить обратно.
joost 1. Использовать INSERT DELAYED... вместо INSERT; 2. Использовать ALTER TABLE ... DISABLE KEYS, потом ALTER TABLE ... ENABLE KEYS; 3. (самый, на мой взгляд, разумный способ) Просто грохнуть индекс перед добавлением большого числа записей, потом пересоздать его. В ряде случаев индекс создается с нуля на порядки быстрее, чем пересчитывается имеющийся. И дерево индекса получается более сбалансированным, т.е. индекс будет более эффективным.
Горбунов Олег It depends... если при добавлении новой записи потребуется частично перестроить дерево индекса (а такое случается), задержка может оказаться ощутимой.
например в таблице есть запись с полем (єто поле "Полн.Текст") "http://mobilnik.com" мне надо проверить есть ли такая запись делаю так [sql] if (mysql_num_rows(mysql_query("select name_url from url where name_url like 'http://mobilnik.com' "))>0) [/sql] правильно ? или можно проще как-то? name_url - индекс (Полн.Текст)
Скажите пожалуйста, при создании таблицы вот эта строка 'Primary Key (ID)' обязательна, я так понял она для индексации. и что означает FOREIGN KEY?
- в innodb родного фуллтекста нет. - не надо рассказывать сказки про перестройку B+ деревьев. Вот фуллтекст перестраивать да, долго. Для этого есть словари, эдд-оны к мускулу и другие приколы. а это как раз обычный индекс, а не полнотекстовый. И при желании можно заменить на md5()