Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте...
Не могу разобраться с FULLTEXT KEY. Раньше у меня была таблица с одни столбцом и проблем не было...
Сейчас же мне необходимо искать по 4-м столбцам, пример:
`author`, `title`, `publisher`, `isbn`
Как я понял что бы искать по двум столбцам необходимо сделать соответствующий индекс по нескольким столбцам, например (`author`, `title`)
а если мне понадобится (`author`, `isbn`) или (`author`, `publisher`) и т.д, т.е получается куча вариантов...
Пробовал так:
Отредактированно Марк (17.03.2011 23:38:22)
Неактивен
Так работать, разумеется, не будет — при выборе из таблицы Вы можете
использовать только один индекс (будь то полнотекстовый или нет). Соот-
ветственно, одно из условий проверяется по индексу, а остальные —
наживую.
Имеет смысл сделать один индекс на все четыре столбца и искать сразу
по четырем столбцам.
Неактивен
В том то и всё... необходимо искать например по автору и названию или по isbn и автору)))
Получается придётца сделать так:
Неактивен
Вы усложняете себе задачу. Точнее — Вы решаете совсем не ту задачу.
Вы придумываете страшные костыли, чтобы заработал полнотекстовый
поиск. Вместо того, чтобы реорганизовать данные так, как они должны
быть по логике. Это общее правило на самом деле — если Вы громоздите
костыли, значит, пора пересмотреть архитектуру.
В ISBN не может быть вбито более одного слова. В автора не
может быть вбито более одного числа. Точнее даже — автора не
должно быть в этой таблице, авторы должны быть в отдельной таблице,
связанной как многие ко многим. Издатель — это тоже одно число.
Из осмысленных вещей для полнотекстового индекса я вижу только
title.
Неактивен
Дело в том что таблица создаётся каждый день заново и наполняется новыми данными, и даже если я сделаю уникальными записи в столбце `author`и вынесу в отдельную таблицу это всё равно не позволит быстро искать одновременно по автору и названию... в isbn большинство записей имеет более 2 слов
Раньше (автор, название, издатель, isbn) хранились в одном столбце
Неактивен
Тогда варианта два — или нагромождение разных индексов так, как Вы написали,
или один большой индекс, искать по всем полям, а потом отсеивать дополнительно
на уровне обработки запроса.
Т.е. что-то такое:
SELECT ... FROM (SELECT author, title, ... FROM tb WHERE MATCH ...) WHERE title like '%word%'.
Второе будет работать медленнее, но зато ему хватит одного индекса.
Неактивен
Спасибо, пробовал второй вариант
Неактивен
Только если у Вас почти в каждой второй строке есть слово «книга» )
Как правило, полнотекстовый индекс выбирает очень небольшую часть
данных (например, 1%). В этом случае второй способ может быть эффек-
тивным. Если индекс выбирает много строк — выигрыша не будет.
Неактивен
После долгих экспериментов пришёл к выводу что предложенный вами вариант лучше.. лепить столько индексов, слишком. Боюсь представить количество индексов с 6-ю столбцами))) тем более есть limit, 5000 записей пользователю больше чем достаточно...
Как можно отключить кэширование, чтобы поэкспериментировать с производительностью?
Отредактированно Марк (22.03.2011 08:31:26)
Неактивен
Я Вам открою страшную тайну — пользователю достаточно 10, максимум — 25 строк
5000 он просто не в состоянии будет прочитать.
SELECT SQL_NO_CACHE ... Вас спасет.
Неактивен