Оптимизация запросов к БД[MySQL] - подскажите

Discussion in 'PHP' started by Steam[777], 24 Apr 2011.

  1. Steam[777]

    Steam[777] Elder - Старейшина

    Joined:
    27 Sep 2010
    Messages:
    295
    Likes Received:
    41
    Reputations:
    25
    Доброго времени суток. Хочу спросить совета знатоков, или любых соображений "по поводу".
    Пишу "паука". Заходит на страницу, выбирает оттуда все ссылки и заносит их в БД MySQL. Перед добавлением найденной ссылки в БД проверяю, нет ли там её уже.Это создает наибольшую нагрузку на MySQL сервер ( даже выделил под это отдельный хост :) ) .

    Проверяю простым запросом

    'SELECT url FROM name WHERE url ="'+NewLink+'" LIMIT 1;'

    url объявлен как VARCHAR(255) (если это важно)

    Этот запрос тормозит всю работу.
    Нужно снизить нагрузку на MySQL сервер. Думаю, варианты такие

    1.Высчитывать хеш и отписывать его в MySQL, что бы в последствии проводить поиск не по url, а по хешу. Само поле с хешем объявить первичным ключом(если это возможно)
    2.Не использовать проверку наличия ссылки в БД, а объявить поле url как уникальное, и пусть MySQL сам разбирается с уникальностью ссылки
    3.Что-то третье

    Подскажите,как бы снять нагрузку с MySQL сервера?
     
    1 person likes this.
  2. .::f-duck::.

    .::f-duck::. Member

    Joined:
    30 May 2009
    Messages:
    343
    Likes Received:
    32
    Reputations:
    7
    NoSQL:
    Redis, MongoDB, от мейл.ру недавно видел что-то.
     
    1 person likes this.
  3. Steam[777]

    Steam[777] Elder - Старейшина

    Joined:
    27 Sep 2010
    Messages:
    295
    Likes Received:
    41
    Reputations:
    25
    .::f-duck::. - спасибо, но сами страницы сохранять задачи нет. Redis, MongoDB - документо-ориентированная СУБД, всё-таки. Переписывать готовое решение ради оптимизации под новую платформу не очень хочется.
     
  4. randman

    randman Members of Antichat

    Joined:
    15 May 2010
    Messages:
    1,366
    Likes Received:
    610
    Reputations:
    1,101
    Объяви поле первичным ключём и уникальным, но не CHAR. Заноси туда цифровой хэш генерирующий число до 20 символов. Так будет быстрее.Это один вариант.

    Второй вариант, убрать проверку, а поле с сылкой при заносе в БД сделай уникальной. Т е дважды, ссылка не добавиться. - Можно реализавать при одном проходе цикла только один запрос, а не два.
     
    #4 randman, 24 Apr 2011
    Last edited: 24 Apr 2011
    1 person likes this.
  5. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Steam[777] первый+второй вариант, поле с фиксированной длиной + первичный ключ и вставлять с помощью INSERT IGNORE
     
    _________________________
    1 person likes this.
  6. Steam[777]

    Steam[777] Elder - Старейшина

    Joined:
    27 Sep 2010
    Messages:
    295
    Likes Received:
    41
    Reputations:
    25
    Всем спасибо за советы.
    Буду считать хеш и вписывать с IGNORE
    С меня +++ :)