Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Стоит ли использовать такой вариант для поиска / 2 сообщений из 2, страница 1 из 1
15.06.2014, 20:23:44
    #38669836
Гуляев Гоша
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли использовать такой вариант для поиска
Добрый день всем!

Подскажите пожалуйста, стоит ли городить подобный огород для поиска:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
TABLE textData (
  id           INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  textData     TEXT NOT NULL
) COMMENT="Таблица с текстовыми данными"

TABLE slovaData (
  id           INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  slovo        CHAR(50) NOT NULL UNIQUE 
) COMMENT="Таблица с имеющимися словами"

TABLE textSlovaRelation (
  id           INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  textID       INT UNSIGNED NOT NULL,
  slovoID      INT UNSIGNED NOT NULL,
  FOREIGN KEY  (textID) REFERENCES textData(id) ON DELETE CASCADE ON UPDATE CASCADE,
  FOREIGN KEY  (slovoID) REFERENCES slovaData(id) ON DELETE CASCADE ON UPDATE CASCADE,
  UNIQUE KEY   rel (textID,slovoID)
) COMMENT="Таблица со списком слов имеющихся в данном тексте"



Ну и соответственно при добавлении нового текста в textData , по пробелам расхерачивать текст и все слова в таблицу slovaData .
Ну и последующее добавление соответствующих данных в textSlovaRelation .

И поиск организовывать таким образом (задача выбрать тексты, в которых есть все слова имеющие такую подстроку).

Например запрос: браузер завис profe будет трансформирован в запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT   aa.id
FROM     textData             AS aa
JOIN     textSlovaRelation    AS bb ON bb.textID=aa.id
JOIN     slovaData            AS cc ON cc.id=bb.slovoID
WHERE    cc LIKE "%браузер%"
    OR   cc LIKE "%завис%"
    OR   cc LIKE "%profe%"
GROUP BY aa.id
HAVING   COUNT(aa.id)=3 /*Кол-во слов в поисковом запросе*/


и надо ли этот огород городить по сравнению с поиском таким запросом:
Код: sql
1.
2.
3.
4.
5.
SELECT    aa.id 
FROM      textData  AS aa
WHERE     aa.textData LIKE "%браузер%"
    AND   aa.textData LIKE "%завис%"
    AND   aa.textData LIKE "%profe%"



Будет ли вариант №1 выгодней в плане производительности при накапливании большого кол-ва сообщений?
...
Рейтинг: 0 / 0
15.06.2014, 21:00:37
    #38669852
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Стоит ли использовать такой вариант для поиска
Гуляев Гоша,

не изобретайте велосипед, прочитайте про full-text search
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Стоит ли использовать такой вариант для поиска / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]