Конференция "Базы" » Получение id последней вставленной строки MySQL [D7, MySQL]
 
  • LotrScope (30.04.13 16:13) [0]
    Делаю запись

    sqlquery1.SQL.text:='INSERT ...';
    sqlquery1.ExecSQL();

    Хочу получить ID строки:

    sqlquery1.SQL.text:='SELECT `id` from `table` order by `id` desc limit 1';
    sqlquery1.ExecSQL();

    Результат есть, всё работает, но скорость упала в 3-4 раза, после добавления запроса на получение последнего ID.
  • Akella-M (30.04.13 16:28) [1]
    Как ускорить процесс получения ID?

    До этого пробовал просто получить последний ID и просто прибавлять по единичке для последующей обработки, но оказалось что нужно брать ID именно после каждой записи, в противном случае возможны неточности.
  • turbouser © (30.04.13 17:06) [2]
  • Akella-M (30.04.13 17:33) [3]
  • Плохиш © (30.04.13 17:53) [4]

    > Как это должно помочь?

    Это избавляет от ваших "неточности", упомянутых в [1]
  • Akella-M (30.04.13 19:02) [5]
    На самом деле всё проще.

    Нельзя иметь дело с количеством записи, в противном случае придется учитывать все записи с ошибками и костылями вычислять их ID.

    Так же нет смысла после записи брать последний записанный ID, это увеличивает время работы с 5 минут для 10 000 записей до 13 минут.

    Единственный адекватный способ, если в базе много записей и после добавления требуется их обработать - это получить ID первой записи, произвести запись данных, а потом сделать выборку всех записей начиная с сохраненного ID. Время на добавление в массив данных из MYSQL 10000 строк выполняется за 10 секунд, следовательно мы выигрываем только так.

    Проблема решена.
  • clickmaker © (30.04.13 19:06) [6]
    > [5] Akella-M   (30.04.13 19:02)

    а чем LAST_INSERT_ID() не устроил?
  • Akella-M (30.04.13 19:27) [7]
    > а чем LAST_INSERT_ID() не устроил?

    Разница в выполнение команд. Просто запись выдает 10 записей в секунду. При добавление LAST_INSERT_ID() количество записей в секунду 3 секунды. Возможно потому-что у меня в базе несколько миллионов записей.

    А если сперва записать, а потом прочесть, то время на выполнение почти не увеличивается.
  • Akella-M (30.04.13 19:28) [8]
    личество записей в секунду =  3.
  • Ega23 © (30.04.13 19:48) [9]
    sqlquery1.SQL.text:='SELECT `id` from `table` order by `id` desc limit 1';


    Буээээээээээ

    select max(id) from ttt;

  • Плохиш © (30.04.13 22:21) [10]

    > Akella-M   (30.04.13 19:27) [7]

    У вас ошибка в программе
  • clickmaker © (30.04.13 22:40) [11]
    > Просто запись выдает 10 записей


    > количество записей в секунду 3 секунды

    велик могучим русский языка
  • знайка (30.04.13 23:41) [12]

    > Просто запись выдает 10 записей в секунду. При добавление
    > LAST_INSERT_ID() количество записей в секунду 3 секунды
     это вы много вставок делаете и после каждой ее ид достаете? а зачем?
  • Кщд (01.05.13 07:27) [13]
    >LotrScope   (30.04.13 16:13)
    у Вас однопользовательская база
    точнее - Вы сами её такой делаете

    >Akella-M   (30.04.13 16:28) [1]
    это Вы же?) Вам нужно начать с К. Дж. Дейта, т.к. пробелы в базовом
 
Конференция "Базы" » Получение id последней вставленной строки MySQL [D7, MySQL]
Есть новые Нет новых   [119659   +89][b:0][p:0.001]