Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 28, 2010 00:06:39

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

SQLite vs MS Acess: помогите ускорить работу SQLite.

Собственно, задача следующая:
есть две таблицы 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. Может быть кто-нибудь предложит вариант, как ускорить работу?



Офлайн

#2 Авг. 28, 2010 00:11:21

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

SQLite vs MS Acess: помогите ускорить работу SQLite.

Индекс по полю, которое указано в условии есть?



Отредактировано (Авг. 28, 2010 00:14:21)

Офлайн

#3 Авг. 28, 2010 00:30:48

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

SQLite vs MS Acess: помогите ускорить работу SQLite.

Ну и результат explain query plan хотелось бы увидеть.



Офлайн

#4 Авг. 28, 2010 08:24:25

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

SQLite vs MS Acess: помогите ускорить работу SQLite.

Lexander
Индекс по полю, которое указано в условии есть?
нет, индексов нет

Lexander
Ну и результат explain query plan хотелось бы увидеть.
а это что такое?



Офлайн

#5 Авг. 28, 2010 11:29:49

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

SQLite vs MS Acess: помогите ускорить работу SQLite.

Вам нужны индексы на поля code_konk (в обеих таблицах) и code_our. При таком объеме данных они уже играют важную роль в скорости выполнения запросов. Если code_konk - поле автоинкрементное, то индекс по нему уже есть и его создавать не нужно (в одной из таблиц, во второй - нужно).

explain query plan позволяет увидеть как строиться запрос. Можно определить причины тормозов.

Начните с индексов.



Офлайн

#6 Авг. 28, 2010 13:16:02

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

SQLite vs MS Acess: помогите ускорить работу SQLite.

хорошо, начну с индексов. А как посмотреть explain query plan?



Отредактировано (Авг. 28, 2010 13:16:22)

Офлайн

#7 Авг. 28, 2010 17:46:30

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

SQLite vs MS Acess: помогите ускорить работу SQLite.

Например, в консоли, запустив утилиту sqlite3.
Далее смотрите в документации ключевое слово EXPLAIN.



Офлайн

#8 Авг. 30, 2010 21:56:34

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

SQLite vs MS Acess: помогите ускорить работу SQLite.

Сделал индексы - скорость увеличилась примерно в 100(!!!) раз, может больше (было 55 сек, стало меньше 1 секунды). Большое спасибо за подсказку.



Отредактировано (Авг. 30, 2010 21:59:37)

Офлайн

#9 Авг. 30, 2010 22:15:24

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

SQLite vs MS Acess: помогите ускорить работу SQLite.

Поздравляю.
Всегда пожалуйста.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version