-
Делаю запись
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.
-
Как ускорить процесс получения ID?
До этого пробовал просто получить последний ID и просто прибавлять по единичке для последующей обработки, но оказалось что нужно брать ID именно после каждой записи, в противном случае возможны неточности.
-
-
-
> Как это должно помочь?
Это избавляет от ваших "неточности", упомянутых в [1]
-
На самом деле всё проще.
Нельзя иметь дело с количеством записи, в противном случае придется учитывать все записи с ошибками и костылями вычислять их ID.
Так же нет смысла после записи брать последний записанный ID, это увеличивает время работы с 5 минут для 10 000 записей до 13 минут.
Единственный адекватный способ, если в базе много записей и после добавления требуется их обработать - это получить ID первой записи, произвести запись данных, а потом сделать выборку всех записей начиная с сохраненного ID. Время на добавление в массив данных из MYSQL 10000 строк выполняется за 10 секунд, следовательно мы выигрываем только так.
Проблема решена.
-
> [5] Akella-M (30.04.13 19:02)
а чем LAST_INSERT_ID() не устроил?
-
> а чем LAST_INSERT_ID() не устроил?
Разница в выполнение команд. Просто запись выдает 10 записей в секунду. При добавление LAST_INSERT_ID() количество записей в секунду 3 секунды. Возможно потому-что у меня в базе несколько миллионов записей.
А если сперва записать, а потом прочесть, то время на выполнение почти не увеличивается.
-
личество записей в секунду = 3.
-
sqlquery1.SQL.text:='SELECT `id` from `table` order by `id` desc limit 1';
Буээээээээээ
select max(id) from ttt;
-
> Akella-M (30.04.13 19:27) [7]
У вас ошибка в программе
-
> Просто запись выдает 10 записей
> количество записей в секунду 3 секунды
велик могучим русский языка
-
> Просто запись выдает 10 записей в секунду. При добавление
> LAST_INSERT_ID() количество записей в секунду 3 секунды
это вы много вставок делаете и после каждой ее ид достаете? а зачем?
-
>LotrScope (30.04.13 16:13)
у Вас однопользовательская база
точнее - Вы сами её такой делаете
>Akella-M (30.04.13 16:28) [1]
это Вы же?) Вам нужно начать с К. Дж. Дейта, т.к. пробелы в базовом