Индексирование текста - MySQL против MS SQL - PullRequest
2 голосов
/ 08 февраля 2011

изображение у вас есть приложение, подобное этому: 1 таблица БД, несколько полей int, несколько небольших полей varchar и около 10 полей TEXT (переменная содержимого - некоторые данные длиной около 50 символов, большинство около 100-200, некоторые около 1000, оченьнемногим больше 1000).Количество строк в x0 000 - x 000 000. Теперь мне нужен эффективный способ запроса, подобный этому (мета-язык):

SELECT (1, если textfield1 LIKE% param1% ELSE 0) как r1, (1, еслиtextfield2 LIKE% param2% ELSE 0) как r2, ... и т. д., как правило, для большинства текстовых полей в 1 запросе (он динамический - может включать 2 из них, может быть все).

Теперь вопрос - что лучше для меня, MySQL или MSSQL (возможно, выразить, когда это возможно, обновить до полного, если это действительно необходимо)?

Я знаю, что в MySQL есть хорошие текстовые индексы, которые вы установили на свой номерпервых символов, так что я могу сбалансировать его для типичного сценария (например: http://fernandoipar.com/2009/08/12/indexing-text-columns-in-mysql/)

MSSQL имеет только полнотекстовое индексирование, с которым у меня нет опыта. Обратите внимание, что мне НЕ нужны такие функции, как близость словили аналогичные слова (run = run; некоторые основы были бы хороши, но поскольку данные многоязычны, это все равно невозможно). Мне нужна просто общая система LIKE% word%, вот и все. И я также должен быть в состоянии найти короткие подстроки (2chars).

Фактически цель состоит в том, чтобы выполнить как можно больше таких запросов в час / день (результатов не будет достаточно, никогда, потому что они должны обновляться как можно чаще), так что подумайте отакого рода эффективность как требование :)

Спасибо!

ОБНОВЛЕНИЕ: очевидно, нет способа использовать индекс для оптимизации запросов LIKE% foo%.Итак, новый вопрос: есть ли другой способ ускорить этот тип запросов?(пожалуйста, пропустите такие слова, как «купить больше оперативной памяти или SSD»:)

Ответы [ 2 ]

3 голосов
/ 08 февраля 2011

LIKE '%foo%' выражение не может быть оптимизировано в any RDBMS.

Вам нужны полнотекстовые индексы в mysql или в sql server

Мне нужно просто обычное LIKE% word% system

Затем выберите любую СУБД, какую захотите, потому что все они будут отстой в таком предложении; -)

2 голосов
/ 08 февраля 2011

Сегодня многие приложения используют внешний индекс и поисковую систему.

Посмотрите на http://lucene.apache.org/

...