Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Индексирование Access базы данных по полю типа ... Добавлено: 09.02.03 20:39  

Автор вопроса:  AlexSid

Мое приложение использует Access БД. Одно из ключевых полей таблицы имеет тип MEMO, оно используется для хранения больших текстов, заранее неизвестного размера.

Объем базы порядка 10000 записей.

При оранизации поиска c помощью VB я использую SQL запрос на поиск некого текста во всех записях (по полям типа MEMO).

Поиск получился жутко долгим. На каждый запрос уходит порядка 20-и секунд, а Access не позволяет индексировать по этому полю.

Что делать? Как ускорить поиск? Есть в Access что-нибудь типа FULLTEXT KEY?

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 BIV



Вопросов: 4
Ответов: 27
 Профиль | | #1 Добавлено: 09.02.03 22:40

Поля типа MEMO не  делают не то, что ключевыми, но и индексированными то же. Слово "ключевых", видимо ты употребил вместо "важных".

Видимо, придется, выбирать из MEMO - поля ключевые слова и хранить их в индексированном поле, лучше в другой связанной таблице, где и осуществлять поиск. Примерно как в поисковиках.

Ответить

Номер ответа: 2
Автор ответа:
 AlexSid



Вопросов: 4
Ответов: 27
 Профиль | | #2 Добавлено: 10.02.03 01:19

Конечно, имелось в виду "важных" полей. Неоднозначно выразился, прошу прощения.

Если не сложно, опишите, пожалуйста, немного подробнее процесс выборки ключевых слов и способ их хранения и связывания с данным полем в другой таблице. Как примерно должна выглядеть эта доп. таблица? Что в тексте должно называться ключевым словом?

Ответить

Номер ответа: 3
Автор ответа:
 BIV



Вопросов: 4
Ответов: 27
 Профиль | | #3 Добавлено: 10.02.03 09:21
Отправил тебе пример

Ответить

Номер ответа: 4
Автор ответа:
 AlexSid



Вопросов: 4
Ответов: 27
 Профиль | | #4 Добавлено: 10.02.03 21:51
Спасибо. Обязательно посмотрю!

Ответить

Номер ответа: 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, хотя бы, если через запятую перечислять. Все равно же не поэтому полю индексировать)

Ответить

Номер ответа: 6
Автор ответа:
 AlexSid



Вопросов: 4
Ответов: 27
 Профиль | | #6 Добавлено: 11.02.03 12:23

Неужели, вас так мало, Господа когда-либо писавшие свой ИНДЕКС??? Не верю! Поделитесь хоть своим мнением, советом... Буду ПРЕочень благодарен!

Ответить

Номер ответа: 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. Почитай еще сообщения этого форума, здесь часто касались этой темы!

Похоже, вопрос с индексированием замялся. А жаль, интересная, по-моему, тема! 

Ответить

Номер ответа: 9
Автор ответа:
 BIV



Вопросов: 4
Ответов: 27
 Профиль | | #9 Добавлено: 13.02.03 23:17
Индексы, как сказал один умный человек, - это алфавитный указатель по краю телефонной книжки. Ты берешь букву "А" и смотришь телефоны на эту букву. Из этого следует, что, как минимум, индекс должен быть небольшим (он к тому же занимает место на диске), а лучше уникальным - свойственным только одной записи в таблице. Последнее далеко не всегда возможно.

Ответить

Номер ответа: 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 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам