За последние 24 часа нас посетили 16466 программистов и 1551 робот. Сейчас ищут 2062 программиста ...

Наличие индексов в таблице

Тема в разделе "MySQL", создана пользователем joost, 25 июл 2008.

  1. joost

    joost Guest

    Ускоряет выборку по индексному полю, но замедляет добавление новых записей.
    1. Правильно?

    2. Обновление не индексного поля такой таблицы будет проходить быстрее при наличии индекса в таблице?
     
  2. Anonymous

    Anonymous Guest

    1. Да. Но потери в скорости выборки при отсутствии индекса в принципе не сравнимы с потерями времени на запись индекса. Ибо индекс сам по себе «индексирован» сам собой.

    2. Да. Будет выигрыш за счет времени поиска этой строки через индекс.

    Естественно, уникальные индексы - самые быстрые.
     
  3. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Перед добавлением большого числа записей эффективнее всего отключить перестройку индексов, а после добавления включить обратно.
     
  4. joost

    joost Guest

    А если индекс текстовое поле?
     
  5. joost

    joost Guest

    как это сделать?
     
  6. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    joost
    1. Использовать INSERT DELAYED... вместо INSERT;
    2. Использовать ALTER TABLE ... DISABLE KEYS, потом ALTER TABLE ... ENABLE KEYS;
    3. (самый, на мой взгляд, разумный способ) Просто грохнуть индекс перед добавлением большого числа записей, потом пересоздать его. В ряде случаев индекс создается с нуля на порядки быстрее, чем пересчитывается имеющийся. И дерево индекса получается более сбалансированным, т.е. индекс будет более эффективным.
     
  7. Dagdamor

    Dagdamor Активный пользователь

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Горбунов Олег
    It depends... если при добавлении новой записи потребуется частично перестроить дерево индекса (а такое случается), задержка может оказаться ощутимой.
     
  8. joost

    joost Guest

    Для поиска по текстовому ключевому полю использовать like? или что-то другое?
     
  9. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Смотря какой поиск нужен.
     
  10. joost

    joost Guest

    на полное совпадение
    like без %%
     
  11. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    тогда FULLTEXT
     
  12. joost

    joost Guest

    например в таблице есть запись с полем (єто поле "Полн.Текст")
    "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 - индекс (Полн.Текст)
     
  13. Anonymous

    Anonymous Guest

    Согласен. ЭТо же мои слова! ;)
     
  14. snug

    snug Активный пользователь

    С нами с:
    8 июн 2008
    Сообщения:
    31
    Симпатии:
    0
    Адрес:
    Донецк
    Скажите пожалуйста, при создании таблицы вот эта строка 'Primary Key (ID)' обязательна, я так понял она для индексации.
    и что означает FOREIGN KEY?
     
  15. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Внешний ключ для таблиц InnoDB. Для контролирования связей применяется.
     
  16. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    - в innodb родного фуллтекста нет.
    - не надо рассказывать сказки про перестройку B+ деревьев. Вот фуллтекст перестраивать да, долго. Для этого есть словари, эдд-оны к мускулу и другие приколы.

    а это как раз обычный индекс, а не полнотекстовый. И при желании можно заменить на md5()
     
  17. joost

    joost Guest

    armadillo, чувак ты где пропадал?! долго тебя видно небыло!