|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
База данных на 50 млн. записей
Здравствуйте!
Помогите решить вопрос такого характера. Импортирую txt-файла (экспорт из БД Cronos) в базу данных SQLite с помощью SQLite Maestro v12.1.0. База в ANSI кодировке (кирилица). Поначалу втянул порядка 1 млн. записей. Проиндексировал по 1 полю и решил протестировать простые запросы в самом SQLite Maestro. Что меня обрадовало, это то, что при точном запросе (select * from BD where [Field01]='ПЕТРОВ') SQLite обеспечивает высокую скорость (порядка 0,5-1 с). И что меня огорчило, так это то, что только запрос задаешь не явным способом (select * from BD where [Field01] like 'ПЕТРО%') так скорость выборки растягивается до 4-5 мин. А это только 1 млн. записей из запланированных 50 млн. Чувствую, что я что-то не учел: или то, что это кирилица и ее сравнивать для SQLite сложнее, а лучше втягивать в базу информацию в UTF-8, а результат потом конвертировать в кирилицу или что-то еще. Подскажите где у меня тут грабли... или подскажите еще варианты реализации работы с такой базой но другими средствами.. Спасибо |
#2
|
|||
|
|||
в sqlite есть какие-то специальные текстовые индексы
ПЕТРО% можно записать и так http://stackoverflow.com/questions/8...r-use-an-index >woweook< |
#3
|
|||
|
|||
Спиасибо, реально помагает!
Т.е. запрос типа select * from BD where [Field01] like 'ПЕТРО%' (выполняется 4-5 мин.) заменяю на select * from BD where [Field01]>='ПЕТРО' and [Field01]<'ПЕТРП' (выполняется 10-15 с) здесь началом промежутка есть 'ПЕТРО' (то что ищешь в виде like 'ПЕТРО%'), а концом 'ПЕТРП', т.е. последняя буква - это следующая буква за 'О' // с цифрами еще проще // - выбираются все значения, что начинаются на 'ПЕТРО' Но тут возникает второй момент - как заменить условие like '%ПЕТРО%' |
#4
|
|||
|
|||
никак вроде, есть какой-то fts, может он подойдёт, а может и нет
>woweook< |