Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.09.2012, 04:09
svi2012 svi2012 вне форума
Прохожий
 
Регистрация: 15.09.2012
Сообщения: 7
Репутация: 10
По умолчанию База данных на 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  
Старый 15.09.2012, 06:35
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

в sqlite есть какие-то специальные текстовые индексы

ПЕТРО% можно записать и так http://stackoverflow.com/questions/8...r-use-an-index
__________________
>woweook<
Ответить с цитированием
  #3  
Старый 15.09.2012, 18:08
svi2012 svi2012 вне форума
Прохожий
 
Регистрация: 15.09.2012
Сообщения: 7
Репутация: 10
По умолчанию

Спиасибо, реально помагает!
Т.е. запрос типа
select * from BD where [Field01] like 'ПЕТРО%' (выполняется 4-5 мин.)
заменяю на
select * from BD where [Field01]>='ПЕТРО' and [Field01]<'ПЕТРП'
(выполняется 10-15 с)
здесь началом промежутка есть 'ПЕТРО' (то что ищешь в виде like 'ПЕТРО%'), а концом 'ПЕТРП', т.е. последняя буква - это следующая буква за 'О' // с цифрами еще проще // - выбираются все значения, что начинаются на 'ПЕТРО'

Но тут возникает второй момент - как заменить условие like '%ПЕТРО%'
Ответить с цитированием
  #4  
Старый 16.09.2012, 06:34
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

никак вроде, есть какой-то fts, может он подойдёт, а может и нет
__________________
>woweook<
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:25.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter