Как можно реализовать эффективный поиск в большой базе данных Sqlite (более 90000 записей)?
Я использую Python и SQLObject ORM:
import re
...
def search1():
cr = re.compile(ur'foo')
for item in Item.select():
if cr.search(item.name) or cr.search(item.skim):
print item.name
Эта функция выполняется более 30 секунд. Как мне заставить его работать быстрее?
UPD : Тест:
for item in Item.select():
pass
... занимает почти столько же времени, сколько и моя первоначальная функция (с 0: 00: 33.093141 до 0: 00: 33.322414). Так что регулярные выражения не едят время.
Запрос оболочки Sqlite3:
select '' from item where name like '%foo%';
работает примерно за секунду. Таким образом, основное потребление времени происходит из-за неэффективного извлечения данных ORM из базы данных. Я предполагаю, что SQLObject захватывает здесь все строки, в то время как Sqlite затрагивает только необходимые поля.