Написал приложение которое сканирует расшаренные папки в сети и записывает их в базу данных. База расположена на MS SQL Server и имеет 2 таблицы (одна для файлов, вторая для папок). Файл с базой весит около 2Гб...
Делаю веб страницу (ASP.NET) для поиска. Выполняю запрос типа SELECT * FROM files WHERE filename LIKE '% some string %' проблема состоит в том, что данный запрос выполняется около 4х минут... Вопрос: Как ускорить поиск по базе? Будет ли ускорена работа, если таблицу ,где хранятся файлы, разбить на таблицы, в которых, например, около 300 тыс записей (а не 4 миллиона). И поиск вести уже в каждой таблице, а результат складывать?
Здравствуйте, vit_as, Вы писали:
_>Написал приложение которое сканирует расшаренные папки в сети и записывает их в базу данных. База расположена на MS SQL Server и имеет 2 таблицы (одна для файлов, вторая для папок). Файл с базой весит около 2Гб... _>Делаю веб страницу (ASP.NET) для поиска. Выполняю запрос типа SELECT * FROM files WHERE filename LIKE '% some string %' проблема состоит в том, что данный запрос выполняется около 4х минут... Вопрос: Как ускорить поиск по базе? Будет ли ускорена работа, если таблицу ,где хранятся файлы, разбить на таблицы, в которых, например, около 300 тыс записей (а не 4 миллиона). И поиск вести уже в каждой таблице, а результат складывать?
Нет, скорее всего не будет. Мосмотри BOL не предмет Full-Text Search.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, vit_as, Вы писали:
_>>Написал приложение которое сканирует расшаренные папки в сети и записывает их в базу данных. База расположена на MS SQL Server и имеет 2 таблицы (одна для файлов, вторая для папок). Файл с базой весит около 2Гб... _>>Делаю веб страницу (ASP.NET) для поиска. Выполняю запрос типа SELECT * FROM files WHERE filename LIKE '% some string %' проблема состоит в том, что данный запрос выполняется около 4х минут... Вопрос: Как ускорить поиск по базе? Будет ли ускорена работа, если таблицу ,где хранятся файлы, разбить на таблицы, в которых, например, около 300 тыс записей (а не 4 миллиона). И поиск вести уже в каждой таблице, а результат складывать?
L>Нет, скорее всего не будет. Мосмотри BOL не предмет Full-Text Search.
Здравствуйте, vit_as, Вы писали:
L>>Нет, скорее всего не будет. Мосмотри BOL не предмет Full-Text Search.
_>Расшифруйте, пожалуйста... Как это?
BOL = Books OnLine = документация по ms sql.
Re: Поиск в базе данных
От:
Аноним
Дата:
26.02.07 10:04
Оценка:
Здравствуйте, vit_as, Вы писали:
_>Написал приложение которое сканирует расшаренные папки в сети и записывает их в базу данных. База расположена на MS SQL Server и имеет 2 таблицы (одна для файлов, вторая для папок). Файл с базой весит около 2Гб...
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, vit_as, Вы писали:
_>>Написал приложение которое сканирует расшаренные папки в сети и записывает их в базу данных. База расположена на MS SQL Server и имеет 2 таблицы (одна для файлов, вторая для папок). Файл с базой весит около 2Гб...
А>А индексы не пробовал создать?
Здравствуйте, <Аноним>, Вы писали:
_>>Написал приложение которое сканирует расшаренные папки в сети и записывает их в базу данных. База расположена на MS SQL Server и имеет 2 таблицы (одна для файлов, вторая для папок). Файл с базой весит около 2Гб...
А>А индексы не пробовал создать?
Какие индексы, если запрос LIKE '% some string %'?
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, <Аноним>, Вы писали:
_>>>Написал приложение которое сканирует расшаренные папки в сети и записывает их в базу данных. База расположена на MS SQL Server и имеет 2 таблицы (одна для файлов, вторая для папок). Файл с базой весит около 2Гб...
А>>А индексы не пробовал создать?
L>Какие индексы, если запрос LIKE '% some string %'?
Чтобы можно было использовать запрос типа SELECT * FROM LanDir WHERE MATCH (dirname) AGAINST ('%" + str + "%') нуже Full-Text Search. В MS SQL Server который идет с Visual Studio 2005 по умолчанию его нет. Где его взять?
Кстати, когда поменял типы полей с char(256) на varchar(256) запрос SELECT * FROM files WHERE filename LIKE '% some string %' стал выполняться вместо 4 минут — 40 секунд...