Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];

Вниз

Как ускорить время поиска?   Найти похожие ветки 

 
AlexLines   (2006-01-05 18:19) [0]

При формировании запроса к БД с помощью Like, особенно при длинном запросе like %а% and like %в% not like %б% и т.д. время запроса может составлять до 2-3 секунд (в базе содержится около 2000 записей) на Pentium 4,
на Pentium 3 время возрастает до 4 - 7 секунд,
на Pentium 2 может достигать 5 - 8 секунд.
Это время пропорционально количеству записей в БД

При таком поисковом запросе можно ли ускорить процесс поиска. Где можно найти литературу по оптимизации поиска. Может быть использовать локальные базы данных?

Спасибо


 
Anatoly Podgoretsky ©   (2006-01-05 18:47) [1]

Не делать таких запросов.


 
Fay ©   (2006-01-05 18:51) [2]

Время выполнения какое-то нереальное.
Количество записей просто смешное, а вот 3 секунды - уже не смешно. Жалко, не могу сам "потрогать" эту "БД".


 
Desdechado ©   (2006-01-05 19:41) [3]

запросы с LIKE "%ю%" не используют индексов, только полный перебор всех записей


 
Fay ©   (2006-01-05 19:57) [4]

2 Desdechado ©   (05.01.06 19:41) [3]
Там всего 2000 записей! На таком количестве особо и не нужен.


 
Fay ©   (2006-01-05 19:58) [5]

Fay ©   (05.01.06 19:57) [4]
В смысле, "индекс особо не нужен".


 
AlexLines   (2006-01-05 21:14) [6]

Может быть дело в том, что запрос может составлять две страницы, т.к. поиск происходит по маске
Например, при поиске слова индекс будут найдены все слова

индекс
"индекс"
(индекс)
/индекс/
индекс.
индекс!
индекс,

и т.д.


 
AlexLines   (2006-01-05 21:18) [7]

А еще вопрос к Анатолию Подгорецкому

А какие запросы делать ...?
Если вы конечно знаете
И где искать литературу по вопросу оптимизации поиска


 
Anatoly Podgoretsky ©   (2006-01-05 21:38) [8]

AlexLines   (05.01.06 21:18) [7]
При таких запросах %x% индексы не используются, к тому же у тебя много AND в одном запросе, так что время умножается.

А что ты хочешь сделать, может тебе поможет поиск по таблице слов?


 
AlexLines   (2006-01-05 22:27) [9]

Anatoly Podgoretsky ©   (05.01.06 21:38) [8]

Как осуществляется поиск по таблице слов?


 
Anatoly Podgoretsky ©   (2006-01-05 22:35) [10]

Select * from Words where Wird="sdfsaf"


 
Fay ©   (2006-01-05 22:40) [11]

2 Anatoly Podgoretsky ©   (05.01.06 21:38) [8]
> так что время умножается.

Всё должно быть не так трагично. В конце концов, не очевидно, что для большинства записей выполняются все проверки.

Ещё раз. Время выборки слишком большое - рагадох не держит особо длинных строк, а записей - кот наплакал. Т.о. общее количество операций довольно маленькое.

Мне кажется, дело не в запросе. Что-то с компом (или с сетью) не в порядке.


 
Anatoly Podgoretsky ©   (2006-01-05 22:42) [12]

Fay ©   (05.01.06 22:40) [11]
Согласно теории вероятности 50%


 
AlexLines   (2006-01-05 23:30) [13]

Fay ©   (05.01.06 22:40) [11]
Что-то с компом (или с сетью) не в порядке.

Проверял на 10 компьютерах разной конфигурации
Приложение для локального использования (сеть не используется)

Поиск происходит по 3 полям базы данных типа memo
Размер базы 2 Мб


 
Fay ©   (2006-01-05 23:58) [14]

Ага, MEMO значит. Об индексах говорить не приходится вовсе.

Что можно сказать в таком случае? Paradox фтопку.
Могу посоветовать MSSQL 2005 Express - там есть отлисная штука по имени varchar(max).
Хотя, возможно, это
а) неосуществимо (чужая прога, исходников нет (зато есть бесценные секретные алгоритмы), Коран не велит, и т.п.)
б) слишким жирно для решаемой задачи

Вы не пытались открыть тот же набор данных используя не where, а OnFilterRecord?


 
sniknik ©   (2006-01-06 00:04) [15]

> Поиск происходит по 3 полям базы данных типа memo
чем дальше в лес, тем ну его нафиг. ;))

> Размер базы 2 Мб
это действительно размер базы? или таблици? или таблицы с файлом содержашим значения мемо полей? (т.е. того от чего зависит)

p.s.
> для локального использования
тут будет быстрее табличный доступ и поиск перебором, с однократным извлечением мемо поля и многократным поиском в нем вхождений.


 
AlexLines   (2006-01-06 00:31) [16]

Fay ©

Что можно сказать в таком случае? Paradox фтопку.

Если запрос состоит только из одного слова поиск значительно ускоряется - менее секунды

Однако поиск по маске может включать достаточно большой запрос - десятки слов "индекс", (индекс), индекс! not "яндекс", (яндекс), яндекс! и т.д. При этом поиск значительно замедляется

А почему Paradox -то фтопку?

sniknik ©

1. это действительно размер базы?

Размер таблицы с файлом содержашим значения мемо полей

2. тут будет быстрее табличный доступ и поиск перебором, с однократным извлечением мемо поля и многократным поиском в нем вхождений.

А как это лучше осуществить (хотя бы кратко - основная идея)?


 
Fay ©   (2006-01-06 00:42) [17]

2 AlexLines   (06.01.06 0:31) [16]
> А почему Paradox -то фтопку?
Потому, что он - гуано полное. Прошу прощения за мой французский. Не понимаю, как можно до сих пор на нём писать, когда есть куча других движков (бесплатных и куда более мощных).


 
AlexLines   (2006-01-06 00:48) [18]

Fay ©

А что посоветуете
И чем оно лучше

Кроме этого, если присоединить Блоб поле, к этой базе данных, например с изображением (размер базы данных увеличивается с 2 до 12 Мб) поиск происходит очень медленно - на Pentium  4 - 10 - 15 секунд

Из-за чего это может происходить?


 
Fay ©   (2006-01-06 01:01) [19]

2 AlexLines   (06.01.06 0:48) [18]
> Из-за чего это может происходить?
Рагадох не использовал уже лет сто, и не помню что там почём.

> А что посоветуете
Могу посоветовать FireBird. Могу. Но сам бы выбрал MSDE или, что куда вероятнее, MSSQL 2005 Express (совершенно бесплатная штука).

> И чем оно лучше
Не смогу объяснить. Это как сравнивать кошачью блевотину и армянский коньяк - даже не знаю с чего начать.
Попробуй, сравни сам. Такой опыт не останется мёртвым грузом.
Скажу только, что про "до 2-3 секунд (в базе содержится около 2000 записей) на Pentium 4" забудешь навсегда.


 
AlexLines   (2006-01-06 09:02) [20]

А что можно сказать по поводу FireBird против MySql


 
Fay ©   (2006-01-06 09:27) [21]

2 AlexLines   (06.01.06 9:02) [20]
> А что можно сказать по поводу FireBird против MySql
Из FB и MySQL я бы выбрал первое. Но после рагадоха это без разницы 8)

Защитники и недоброжелатели найдутся для какого угодно движка. При этом у обоих сторон найдутся достаточно объективные аргументы.

З.Ы.
Уверен, с FB работать будет проще.


 
Джо ©   (2006-01-06 15:15) [22]

> [20] AlexLines   (06.01.06 09:02)
> А что можно сказать по поводу FireBird против MySql

В MySQL транзакциев нормальных нету :0)


 
Anatoly Podgoretsky ©   (2006-01-06 15:28) [23]

Джо ©   (06.01.06 15:15) [22]
МайЭскьэлов - много, много тысяц


 
Джо ©   (2006-01-06 15:49) [24]

> [23] Anatoly Podgoretsky ©   (06.01.06 15:28)
> Джо ©   (06.01.06 15:15) [22]
> МайЭскьэлов - много, много тысяц

Стандартный дистрибутив ведь имеется? Вот я о нем. Или уже включили туда кривенькую поддержку транзакций. Ох, сомневаюсь...


 
Игорь Шевченко ©   (2006-01-06 18:18) [25]

2000 записей проще в память прочитать


 
Anatoly Podgoretsky ©   (2006-01-06 18:33) [26]

Джо ©   (06.01.06 15:49) [24]
Да у них новые версии штампуются так, что не успеваешь их скачивать, я как то подсчитал количество для версии 3.х.х.х и прослезился.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.03.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.013 c
4-1134303640
volser
2005-12-11 15:20
2006.03.05
Ипользование SHGetImageList


2-1140067495
Canopus
2006-02-16 08:24
2006.03.05
Как активировать компоненту


2-1140177674
zorik
2006-02-17 15:01
2006.03.05
Не считываются cookies (cgi)


2-1140273551
Pit
2006-02-18 17:39
2006.03.05
Подменю в PopupMenu


15-1139838359
Arkady
2006-02-13 16:45
2006.03.05
Borland отказывается от развития Dephi и C++





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский