Страница: 1 |
|
Вопрос: Индексирование Access базы данных по полю типа ...
|
Добавлено: 09.02.03 20:39
|
|
Автор вопроса: AlexSid
|
Мое приложение использует Access БД. Одно из ключевых полей таблицы имеет тип MEMO, оно используется для хранения больших текстов, заранее неизвестного размера. Объем базы порядка 10000 записей. При оранизации поиска c помощью VB я использую SQL запрос на поиск некого текста во всех записях (по полям типа MEMO). Поиск получился жутко долгим. На каждый запрос уходит порядка 20-и секунд, а Access не позволяет индексировать по этому полю. Что делать? Как ускорить поиск? Есть в Access что-нибудь типа FULLTEXT KEY?
Ответить
|
Номер ответа: 1 Автор ответа: BIV
Вопросов: 4 Ответов: 27
|
Профиль | | #1
|
Добавлено: 09.02.03 22:40
|
Поля типа MEMO не делают не то, что ключевыми, но и индексированными то же. Слово "ключевых", видимо ты употребил вместо "важных". Видимо, придется, выбирать из MEMO - поля ключевые слова и хранить их в индексированном поле, лучше в другой связанной таблице, где и осуществлять поиск. Примерно как в поисковиках.
Ответить
|
Номер ответа: 2 Автор ответа: AlexSid
Вопросов: 4 Ответов: 27
|
Профиль | | #2
|
Добавлено: 10.02.03 01:19
|
Конечно, имелось в виду "важных" полей. Неоднозначно выразился, прошу прощения. Если не сложно, опишите, пожалуйста, немного подробнее процесс выборки ключевых слов и способ их хранения и связывания с данным полем в другой таблице. Как примерно должна выглядеть эта доп. таблица? Что в тексте должно называться ключевым словом?
Ответить
|
Номер ответа: 5 Автор ответа: AlexSid
Вопросов: 4 Ответов: 27
|
Профиль | | #5
|
Добавлено: 10.02.03 22:13
|
Посмотрел... Ты предлагаешь создать вторую таблицу с записями типа (Id, Words), где Id в "индексной" таблице будет соответствовать Id в индексируемой таблице с MEMO полем... Но вот вопрос, а какой мне толк от текстового поля Words, если я индексирую большие тексты в поле MEMO? У меня же количество ключевых слов будет достаточно большим чтобы уместится в поле длиной 255 символов. Можно, конечно, выбрать набор слов из MEMO, не превышающий 255 символов, но тогда падает эффективность поиска! А нельзя ли созать "индексную" таблицу (Word, MEMO_Ids), где в поле Word будет какое-либо одно ключевое слово, а в поле MEMO_Ids все номера Id полей MEMO, в которых встречается данное ключевое слово? Не знаю, правда, какого типа должно быть поле MEMO_Ids... (Да тот же MEMO, хотя бы, если через запятую перечислять. Все равно же не поэтому полю индексировать)
Ответить
|
Номер ответа: 7 Автор ответа: ericsson
Вопросов: 2 Ответов: 2
|
Профиль | | #7
|
Добавлено: 11.02.03 17:53
|
Для связи с Acces БД ты используешь компонент Data ? Или какой? Если Data, то подскажи пожалуйста какой файл нужен чтобы прога работала на других компах, а то у меня после перетаскивания проги на другой комп где нет VB60 вадает ошибку "Object class not registred"
Ответить
|
Номер ответа: 8 Автор ответа: AlexSid
Вопросов: 4 Ответов: 27
|
Профиль | | #8
|
Добавлено: 12.02.03 10:39
|
To ericsson: Для связи я использую DAO, для которого соответственно нужен файл dao350.dll или dao360.dll. Почитай еще сообщения этого форума, здесь часто касались этой темы! Похоже, вопрос с индексированием замялся. А жаль, интересная, по-моему, тема!
Ответить
|
Номер ответа: 10 Автор ответа: AlexSid
Вопросов: 4 Ответов: 27
|
Профиль | | #10
|
Добавлено: 14.02.03 00:38
|
To BIV: "как минимум, индекс должен быть небольшим"... А как же тогда создавать этот индекс? Ась? Автоматизация? Не руками же из 10000 статей ключевые слова вычленять! А программным путем, найти самые главные слова статьи и присвоить именно им статус КЛЮЧЕВЫХ, это, знаете, Artificial Intelligence...
Ответить
|
Номер ответа: 11 Автор ответа: BIV
Вопросов: 4 Ответов: 27
|
Профиль | | #11
|
Добавлено: 18.02.03 12:59
|
По - моему, ты ставишь непосильную задачу перед Access. Нельзя требовать от автомата, чтобы он уничтожал танки, для этого есть пушки. Не забывай, что Access - это хотя и мощная, но все-таки настольная (персональная) СУБД. Не думаю, что данные на Апорте или Рамблере хранятся и обрабатываются с использованием Access. Так что 20 сек поиска в такой куче данных на мой взгляд - вполне пристойное время. Много зависит от качества статей. Напр., в уважающих себя научных журналах к тексту статьи обязательно прилагается реферат, содержащий ключевые слова, и который можно использовать для поиска. Тема эта, видимо не только нам с тобой интересна (включена в рассылку), поэтому было бы неплохо организовать на сайте вкладку "Дискуссии", куда бы модератор форума выносил наиболее интересные затронутые темы.
Ответить
|
Номер ответа: 12 Автор ответа: AlexSid
Вопросов: 4 Ответов: 27
|
Профиль | | #12
|
Добавлено: 20.02.03 00:32
|
"По - моему, ты ставишь непосильную задачу перед Access"... Можт быть для Access она и непосильная, но скорость увеличивать-то надо! С проблемой я уже более менее разобрался: создал свой индекс, проиндексировал всю базу (объем ее соответсвтенно увеличился раза в 2.5) и теперь поиск разотает за 0.5-1 сек...
Ответить
|
Страница: 1 |
Поиск по форуму