медленно работает код или это нормально... | |
---|---|
ProbaSP Автор Сообщений: 94 Откуда: Урал Дата регистрации: 28.01.2016 |
Привет всем!
Нужен совет(помощь) новичку. Пользователь вставляет пустую строку в таблицу bd. таблица содержит последовательности обработки деталей. Есть поле pn (порядковый номер) по которому и происходит сортировка при отображение в гриде(курсора). И при вставки строки внутрь последовательности я увеличиваю каждое значения pn после текущей записи на 1. и затем добавляю запись с номером текущим. к сожалению больше ни чего не смог придумать...
в таблице bd пока 40 тыс. записей. этим кодом изменяет примерно записей 200. но процесс занимает примерно 4-5 секунд. как-то долго... |
Re: медленно работает код или это нормально... | |
---|---|
Taran Сообщений: 13623 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Ну как минимум
|
Re: медленно работает код или это нормально... | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
1. Если немного подумать, вспомнить,узнать про разницу между хранением и отображением и перестать считать порядковый номер исключительно целым числом, то вставка новой записи между двумя имеющимися превратиться всего лишь в вычисление среднего между порядковыми номерами двух этих самых имеющихся записей.
2. ALLTRIM(thisform.text1.Value) в любом количестве (а даже в приведенном куске использовано два раза) легко заменяется на установку латинской буквочки Т в свойство format поля thisform.text1.Value. Не понимаю упорства в размножении именно этой конструкции с alltrim() по коду в просто диких количествах. Вон хотя бы как Taran писали... ------------------ Лень - это неосознанная мудрость. Исправлено 1 раз(а). Последнее : ssa, 01.03.18 09:45 |
Re: медленно работает код или это нормально... | |
---|---|
ProbaSP Автор Сообщений: 94 Откуда: Урал Дата регистрации: 28.01.2016 |
Спасибо. код выполняется примерно 2 секунды. Ну это куда ни шло. А можно есче быстрей? Как ни странно, но я об этом думал(среднее значение), только, к сожалению, мысль не до развил. Остановился на том что нужно будет считать среднее между уже средним и целым(например). Посчитал несколько, дошел до 1.03125(это среднее между 1 и 1.0625), подумал, что занимаюсь глупостью и бросил... По поводу alltrim() буду разбираться. Спасибо. И Вы совершенно правы, отображать эти номера мне(и пользователю) не нужно, только для сортировки. Исправлено 1 раз(а). Последнее : ProbaSP, 01.03.18 10:45 |
Re: медленно работает код или это нормально... | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Ну и ко всему вышесказанному добавлю.
Не нравится цикл А вот так подумайте.
------------------ |
Re: медленно работает код или это нормально... | |
---|---|
Taran Сообщений: 13623 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Индексировать конечно надо по искомым полям.
Ну можно еще попробовать. Но не факт что быстрее.
|
Re: медленно работает код или это нормально... | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
На самом деле как я понимаю, вы уже знаете число которое будете вставлять, пусть это будет kolzap (нелепое название) тогда запрос превращается в
------------------ Исправлено 1 раз(а). Последнее : Аспид, 01.03.18 10:52 |
Re: медленно работает код или это нормально... | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
На самом деле он знает между какими записями ему надо вставить и весь код сжимается до единственной команды вставки без каких-либо пересчётов порядковых номеров в других записях. ------------------ Лень - это неосознанная мудрость. |
Re: медленно работает код или это нормально... | |
---|---|
Аспид Сообщений: 3475 Откуда: Москва Дата регистрации: 01.04.2005 |
Это ясно. Я ж понял твою мысль) Но практически, 200 записей = 200мс. А вот раздвигать 200 записей, очень может не камильфо выйти, он выше описал проблему. ------------------ |
Re: медленно работает код или это нормально... | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
А зачем решать проблему, которую можно вообще не создавать? Зачем раздвигать если можно не раздвигать? ------------------ Лень - это неосознанная мудрость. |
Re: медленно работает код или это нормально... | |
---|---|
ProbaSP Автор Сообщений: 94 Откуда: Урал Дата регистрации: 28.01.2016 |
второй код выполняется чуть-чуть дольше, примерно сек 3. т.е. среднее значение это самое верное решение? мне мысль сразу понравилась, что не надо перелопачивать остальные записи. Но, блин, 10 вставка между 1 и уже средним значением 1,0009765625 будет - 1,00048828125. А если нужно будет вставить 100 значений(со временем)... Исправлено 1 раз(а). Последнее : ProbaSP, 01.03.18 11:36 |
Re: медленно работает код или это нормально... | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
Хорошо, пляши тогда не от 1, а от 1000000. Хватит?
------------------ Лень - это неосознанная мудрость. |
Re: медленно работает код или это нормально... | |
---|---|
Taran Сообщений: 13623 Откуда: Красноярск Дата регистрации: 16.01.2008 |
Ну порой если не раздвигать, то и вставить не получится. |
Re: медленно работает код или это нормально... | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
Решил пойти путем медстраха? ------------------ Лень - это неосознанная мудрость. |
Re: медленно работает код или это нормально... | |
---|---|
ProbaSP Автор Сообщений: 94 Откуда: Урал Дата регистрации: 28.01.2016 |
эмм... видимо я чего-то не понимаю (или вообще ни чего) "разницы" не увидел. между 1000000 и 100001 - 10 вставка будет - 1000000,00048828125 только нули добавились... |
Re: медленно работает код или это нормально... | |
---|---|
PaulWist Сообщений: 14601 Дата регистрации: 01.04.2004 |
Похоже на Бейсике не программировал
Используй шаг приращения не i + 1, а i + 10000, тогда вставка 200 значений между записями с номерами 2000 и 3000 будет (3000-2000)/200 = 5, те i + 5. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: медленно работает код или это нормально... | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
Похоже... 1. Для начала я говорил о среднем значении двух соседних записей, а не записью и фиксированным числом. 2. Чем пугают знаки после запятой? ------------------ Лень - это неосознанная мудрость. |
Re: медленно работает код или это нормально... | |
---|---|
Simple777 Сообщений: 33855 Дата регистрации: 05.11.2006 |
Тут вот какое дело. Прежде чем вставлять номер между двумя записями ( взяв средне значение ), надо проверить, не получилось ли это среднее значение равным уже существующему номеру (выше или ниже). И если оказалось, что лимит вставок уже превышен, то "свистать всех наверх" , то бишь написать юзеру сообщение "Ждите..." и массово переприсвоить все номера для всех таблиц, где эти номера используются. Возможно, что и пару минут придется подождать. Но зато после переприсвоения этих внутренних номеров можно будет уже вставлять записи между любыми двумя до достижения лимита вставок. В принципе, можно сделать и такую функцию администрирования - переприсвоение внутренних номеров. Конечно, такие переприсвоения возможны только в тех случаях, когда будет доступ ко всем таблицам, где переприсваиваются внутренние номера.
Когда-то я столкнулся с аналогичной проблемой, и вот таким образом ее решил. |
Re: медленно работает код или это нормально... | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
И опять завернутость на ЦЕЛЫЕ числа. Как среднее двух чисел может быть равно одному из них, если эти два числа не равны друг другу и НЕ (ЦЕЛЫЕ/НАТУРАЛЬНЫЕ)? Остальное совершенно неоригинально и проистекает из самой завернутости на целых числах. ------------------ Лень - это неосознанная мудрость. |
Re: медленно работает код или это нормально... | |
---|---|
ProbaSP Автор Сообщений: 94 Откуда: Урал Дата регистрации: 28.01.2016 |
только тем, что вдруг когда-нибудь придется вручную исправлять(восстанавливать) таблицу которая по каким-то причинам "полетела", то с такими значениями визуально (лично мне) будет не комфортно "работать". Но скорее всего это паранойя... Ну это уже тонкости... И вижу, что так делал. ;) Я так понял, что нужно смотреть в сторону среднего значения. И забыть про
правильно? |
© 2000-2024 Fox Club  |