2009-04-21 9 views
0

Есть ли какая-либо информация о том, как SQL Server сравнивает строки и обрабатывает их поиск (например, статусы)? Я пытаюсь выяснить, есть ли способ определить, насколько эффективно хранить информацию в виде большой строки и использовать SQL-сервер, чтобы сделать кучу сравнений по строкам, чтобы определить, какое совпадение. Я знаю, что это потенциально будет медленным (каждая строка информации будет длиной 2400 символов), но мне нужно что-то удушающее, как сравнивается строка, поэтому я могу показать эффективность (или неэффективность).Sql Server String Сравнение

+0

1. Планируете ли вы полный индекс текста? 2. Проводили ли вы какие-либо проверки времени на этот тип решения? 3. С какими данными вы собираетесь работать? Как правило, мы избегаем использования инструкций LIKE. Это сообщение, похоже, указывает, что динамический sql может быть лучше, чем полный текстовый индекс: http://social.msdn.microsoft.com/forums/en-US/sqldatabaseengine/thread/c8734672-837d-4e63-92e4-76c58a368251/ –

+0

Что не так с этим? WHERE LastName, как «Smi%», имеет смысл и WHERE LEFT (LastName, 3) = «Smi» не ... нет абсолютно ничего плохого, например, когда вы начинаете поиск столбца – SQLMenace

+0

Потому что я уверен, что как правило, не работает при поиске строки длиной в 400 символов в середине поля. – kemiller2002

ответ

2

каждая строка информации будет 2400 символов

Ровно 2400? Итак, у вас есть поля с фиксированной шириной? Сохраните свое время и просто разделите его на отдельные столбцы. Вы поблагодарите себя позже.

Если у вас должно быть есть данные, настройте тестовый бит и попробуйте в обоих направлениях. Тогда, по крайней мере, у вас будут данные, которые относятся к вашей системе.

+0

Из-за характера данных я не могу этого сделать. Я подумал об этом, но это заставит меня сделать кучу конкатенаций, чтобы определить общую ценность данных. 2400 - это, по сути, большой набор флагов, которые нам нужно будет искать, чтобы найти ряд установленных флагов в строке. На самом деле я ищу информацию о том, что это было бы очень неэффективно. – kemiller2002

+0

Я думаю, что (KNOW!) Вы обнаружите, что разделение строки на вставке будет намного быстрее, чем разбиение на поиск или извлечение. Кардинальное правило проектирования базы данных: 1 столбец, 1 значение. –

+0

Вот сделка. Dba хочет, чтобы каждый символ представлял 1 минуту времени. Я должен искать, чтобы определить, сколько времени у вас есть. Разделение его означает, что мне придется выполнять большой объем работы, определяя, какие значения выстраиваются в линию, чтобы выяснить, сколько времени занимает время. Я не говорю, что вы ошибаетесь, но мне нужна информация, чтобы показать, почему это плохая идея. У меня есть другие структуры данных, чтобы подойти к проблеме, но мне нужно опровергнуть его идею, прежде чем я смогу представить свои собственные. – kemiller2002

0

поиск в них будет медленным, потому что вы не сможете создать индекс, так как индекс не может быть длиной более 900 байт/широким

я бы делать то, что говорит Джоэл Coehoorn и разделить его на колонки

вы также можете разделить его на несколько таблиц, потому что вы можете хранить только 3 строки рг страницы с 2400 символов в строку

0

Есть полные индексы поиска текста, которые можно применить к SQL Server, которые часто используется для таких вещей, как поисковые системы. Полнотекстовые индексы обычно позволяют использовать логические логические операторы для поиска.

+0

Я лично не знаю никого, использующего SQL Полнотекстовый индекс сервера в качестве задней части поисковой системы. Вы знаете какие-либо примеры? Большинство реализаций, о которых я знаю, используют Lucene или настраиваемый код для реализации текстового поиска. –

+0

StackOverflow использует его. –

0

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

0

В статье MSDN Статья о полнотекстовом поиске вызывается о том, как предикат LIKE использует шаблоны символов.

Сравнивая LIKE с полнотекстового поиска

В отличие от полнотекстового поиска, LIKE Transact-SQL предикат работает только на шаблоны символов. Кроме того, вы не можете использовать предикат LIKE для запрограммированных двоичных данных. Кроме того, запрос LIKE в отношении большого количества неструктурированных текстовых данных намного медленнее, чем эквивалентный полнотекстовый запрос по тем же данным. Запрос LIKE против миллионов строк текстовых данных может занять несколько минут; тогда как полнотекстовый запрос может принимать только секунды или меньше по тем же данным, в зависимости от от количества возвращаемых строк.