За последние 24 часа нас посетили 19346 программистов и 1605 роботов. Сейчас ищут 889 программистов ...

Вопрос по лучшему применению функции mysql_query ()

Тема в разделе "PHP и базы данных", создана пользователем Mr. T, 16 апр 2011.

  1. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Вечер добрый,
    задался вопросом, мнение хочется услышать. Допустим, нужно выполнить 50 запросов к базе данных, можно 50 раз в цикле вызвать функцию mysql_query (), а можно накопить все запросы в строковую переменную и выполнить их все потом, вызвав функцию mysql_query () лишь раз. Я считаю, что второй вариант должен быть быстрее, я прав?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Mr. T
    если тебе срать на результат - ты можешь хоть за 10 лет запросов скопить и шарахнуть разом. размер запроса указан в конфиге, можешь выставить сколько пожелаешь. но там подефолту вроде как не меньше мегабайта. тыщи три строк ухнуть можно. :D

    ты всталять собираешься или апдейтить?
     
  3. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    igordata, апдейтить, сейчас около 180 запросов, но реально может быть и больше. Наверное, стоит сделать эксперимент, а также замеры времени.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Mr. T
    вроде как есть другой механизм. ща стариканы придут - расскажут
     
  5. YSandro

    YSandro Старожил

    С нами с:
    7 апр 2011
    Сообщения:
    2.523
    Симпатии:
    2
    А LOAD DATA не пойдет? Записать в файл все запросы и вперёд. Скоростная загрузка.
     
  6. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    YSandro, прочитал описание LOAD DATA - геморрно как-то что ли...
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  8. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Эм, будет другой механизм? :)
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    эй, стариканы! =) какой там механизм, когда сначала ты говоришь, что ты будешь делать, а потом массированно хреначишь одни только значения?
     
  10. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    а что там за запросы? их нельзя как-то изменить, что вместо 180 нужно было 5 делать?)
     
  11. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    не знаю, в тему ли, но
     
  12. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    пофъ.
    [sql]update your_table
    set field3 = case
    when (field1,field2) = (1,2) then 3
    when (field1,field2) = (2,3) then 4
    ...
    else null
    end
    where (field1,field2) in ((1,2),(2,3),...,(30,31))[/sql]
     
  13. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    iliavlad, ну, допустим, есть 100 категорий и рядом с каждой есть текстовое поле input, в котором руками вводится его позиция в выводе, нужно эту позицию записать в базу данных. Если таких категорий 100, то соответственно 100 запросов у меня выходит сейчас.

    titch, жуть какая-то, если можно линк на какую-нибудь статью, что подробнее узнать о предложенном методе решения - буду очень благодарен.
     
  14. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
    Mr. T, поднималась уже такая тема полгода назад
    я частично процитировал последний пост. сам не использовал такую конструкцию в работе (потому что не было такой большой нагрузки на update), но вообще я эту конструкцию встречал в чужом коде пару раз. она хорошо генерируется на лету
     
  15. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    т.е. у тебя сейчас примерно такой запрос update cat_pos_table set pos = 5 where cat_id = 2 ? и получается 100 запросов?

    можно сделать двумя запросами
    delete from cat_pos_table where cat_id in (1,2,5,10)
    insert into cat_pos_table (cat_id, pos) values (1,5), (2,3), (10, 1)

    но это лишь в теории, когда у тебя отдельная таблица cat_pos_table.
     
  16. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    iliavlad,
    способ интересный, спасибо. Я, наверное, сделаю эксперимент с замерами времени и потом выложу результат сюда для общего обозрения :)
     
  17. titch

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

    С нами с:
    18 дек 2010
    Сообщения:
    847
    Симпатии:
    0
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Mr. T
    как вобще часто возникает такая ситуация? =)
     
  19. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Если есть уникальное поле - то один REPLACE запрос