Денис Ш.
7132 повідомлення
#10 років тому
Приветствую

Есть база SQLite. У зака она на 500 метров. Там несколько таблиц.
Было 3 таблицы с основными данными - объект учета один, но разные статусы.
Перенос из статуса в статус означало инсерт в новую таблицу и делит в старой.
На его данных работало медленно. Даже при пакетных вставках.
Решил оптимизировать - объединить 3 таблицы в одну и перенос из статуса в статус сделал простым апдейтом поля "статус".
На больших объемах переноса тормозит.
Может кто-то знает, как можно эту часть оптимизировать?
Василий С.
402 повідомлення
#10 років тому
О! shapod вернулся. гы-гы ) 

- поле "статус" - индекс? если нет, сделать индексом;
- база такая большая из-за количества записей или там файлы хранят? если второе, то хранить только ссылки;
- позволяет ли логика разбить на несколько таблиц (т.е. на "архивные" данные и текущие/актуальные ) ? Так понимаю  - это бухгалтерия какая-то - что если их разбивать помесячно и работать только с актуальными записями;
Денис Ш.
7132 повідомлення
#10 років тому
Ага. вернули

статус - не индекс. подправлю
записей просто дофига
нет. это не бухгалтерия. 
там учет определенных объектов.  у объектов 3 статуса - новые, обработанные, выгруженные.
раньше было под каждый статус отдельная таблица. но перенос очень долгий был, даже с транзакциями
решил сделать одной таблицей. тормоза уменьшились, но не настолько
переход на нормальную СУБД зак не хочет

попробую индекс поставить
Василий С.
402 повідомлення
#10 років тому
Т.е. записи обновляются не все сразу, а по какому то полю (дата, еще_какой-то_статус) По ним идет выборка, и у них обновляется поле "статус"?
Вот эти поля в первую очередь должны быть индексами
Денис Ш.
7132 повідомлення
#10 років тому
Ок. спасибо
попробую. да, там 3 поля фигурируют в условии WHERE 
помогло. правда, на импорте данных в БД потери получил, но это не так страшно
Дмитрий Ч.
218 повідомлень
#10 років тому
А можно нескромный вопрос... какое отношение индексирование поля status имеет к ускорению операции update записи?
Василий С.
402 повідомлення
#10 років тому
TigerDesign, уже никакого, другие проиндексировали, по которым выборка ведется
Денис Ш.
7132 повідомлення
#10 років тому
Статус тоже проиндексирован.
мне же нужно поднимать статус только для тех, у которых он ниже уровня. а остальные ключевые поля могут и совпадать.
получилось 4 индекса (в ходе отладки кода наткнулся еще на одно условие). файл вырос в 2 раза.
может наконец заказчик созреет на MS SQL или MySQL
сейчас база 1Г. и это еще не полное ее наполнение, как я понял.
Роман Беляев
16382 повідомлення
#10 років тому
Цитата (shapod):
может наконец заказчик созреет на MS SQL или MySQL
Я думаю если перспективы очертить, то созреет. Если с головой дружит. А если нет, то в случае возникновения проблем в процессе эксплуатации можно оказаться крайним
Денис Ш.
7132 повідомлення
#10 років тому
Изначально было вообще на Access
никто не предупредил, что там будет столько данных
начались тормоза. я предложил перегнать на MS SQL. он согласился. перегнал. сделал инструкцию по установке и прочему
сказал, что сложно. и сам предложил SQLite. перед этим я уже делал одному систему с этой субд. ну, там было 100-200 К записей и немного иной режим работы.
перегнал. у меня на тестах все быстро работало.
у зака тормоза.
попросил его БД. прислал 500 Метров  я в шоке
Роман Беляев
16382 повідомлення
#10 років тому
shapod, в общем все от неточной постановки задачи.
Печаль!
Денис Ш.
7132 повідомлення
#10 років тому
Ага. хорошо, что мы на почасовку договорились. все его капризы он сам оплачивает