2011-02-08 2 views
2

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

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 = ran; некоторые из них были бы хороши, но поскольку данные многоязычны, это в любом случае невозможно). Мне нужна простая система LIKE% word%, вот и все. И я также должен иметь возможность находить короткие подстроки (2 символа).

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

Thanx!

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

ответ

2

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

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

+0

большое спасибо за этот намек, я взглянул и очень быстро прототипировал что-то, и Lucene.NET определенно похоже на способ пойти .. freakin быстро и гибко, я очень изумлен на самом деле :) – rouen

3

LIKE '%foo%' выражение не может быть оптимизировано в любое РСУБД.

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

мне нужно просто здравый LIKE% слово% системы

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

+0

вы уверены, что? посмотрели ли вы ссылку на mysql? мне кажется, что парень довольно оптимизировал запрос так же, как и индексы в текстовых полях – rouen

+1

@rouen: есть ** существенная ** разница между 'LIKE 'foo%'' и 'LIKE '% foo%''. Последние ** не могут быть оптимизированы с индексами. По определению. Читайте о B-Trees. – zerkms

Смежные вопросы