Форум сайта python.su
Собственно, задача следующая:
есть две таблицы price_konk (code_konk integer, price_konk float) и codes_tbl(code konk, code_our).
содержимое таблиц price_konk - около 10тыс.записей, codes_tbl - около 40 тыс. записей.
из этих двух таблиц необходимо сделать запрос на объединение, который будет возвращать code_our, price_konk
собственно, он у меня получился следующим:
'select codes_tbl.code_our, price_konk.price from left join codes_tbl on price_konk.code_konk=codes_tbl.code_konk where codes_tbl.code_our is not null'
далее данные из запроса на объединение передаются в список кортежей.
Собственно, данное решение работает. Но медленно. Т.е. объединение занимает на компьютере (Inter core duo e7200) около 50 секунд. Тогда как такой же запрос в БД MS Access выполняется около 1 секунды. При этом в интернете пишут, что SQLite быстрее ms access. Может быть кто-нибудь предложит вариант, как ускорить работу?
Офлайн
Индекс по полю, которое указано в условии есть?
Отредактировано (Авг. 28, 2010 00:14:21)
Офлайн
Ну и результат explain query plan хотелось бы увидеть.
Офлайн
Lexanderнет, индексов нет
Индекс по полю, которое указано в условии есть?
Lexanderа это что такое?
Ну и результат explain query plan хотелось бы увидеть.
Офлайн
Вам нужны индексы на поля code_konk (в обеих таблицах) и code_our. При таком объеме данных они уже играют важную роль в скорости выполнения запросов. Если code_konk - поле автоинкрементное, то индекс по нему уже есть и его создавать не нужно (в одной из таблиц, во второй - нужно).
explain query plan позволяет увидеть как строиться запрос. Можно определить причины тормозов.
Начните с индексов.
Офлайн
хорошо, начну с индексов. А как посмотреть explain query plan?
Отредактировано (Авг. 28, 2010 13:16:22)
Офлайн
Например, в консоли, запустив утилиту sqlite3.
Далее смотрите в документации ключевое слово EXPLAIN.
Офлайн
Сделал индексы - скорость увеличилась примерно в 100(!!!) раз, может больше (было 55 сек, стало меньше 1 секунды). Большое спасибо за подсказку.
Отредактировано (Авг. 30, 2010 21:59:37)
Офлайн
Поздравляю.
Всегда пожалуйста.
Офлайн