SQL Server 2008 - хранение и поиск URL (веб-адрес) - PullRequest
3 голосов
/ 04 сентября 2010

Я сталкиваюсь с решением о том, как хранить URL (закладки) в таблице.У меня есть следующие требования:

Клиент должен иметь возможность искать название закладки.

Я решил использовать FTS с опцией ранжирования для этого требования

Клиент должен иметь возможность искать адрес

Здесь у меня есть сомнения относительно того, как хранить URL.Прежде всего, URL-адреса должны быть уникальными в моей таблице.Это потенциально может быть очень большой стол.Там не будет никаких обновлений или удалений в этой таблице.Я имел в виду следующее:

ID [int] IDENTITY(1,1) -- identity and foreign key in other table(s)
Title [nvarchar](500) -- title (FTS)
CompleteURL [nvarchar](300), -- Unique index example: http://www.bbc.co.uk
URLPrefix [nvarchar](20), -- example: http://www
URLSufix [nvarchar](280), -- example: bbc.co.uk/something (index)

Я понимаю, что у меня есть дублирование данных, но у меня нет проблем с этим, поскольку здесь речь идет о целостности данных (без обновлений и удалений) и важна производительность.Я думал использовать CompleteURL в качестве моего IF EXISTS во время вставки.Я не уверен, что этот подход обеспечит лучшую производительность, чем составной ключ для URLPrefix и URLSufix и полностью потеряет CompleteURL ?

URLSufix обеспечит быстрый поиск для параметра поиска LIKE 'bbc%' .

Но что, если клиент выполнит поиск LIKE 'www.bbc%' ?Никаких подстановочных знаков в начале строки (% bbc%) не может быть и речи, так как я не могу позволить себе сканирование всей таблицы.

Кроме того, я решил переместить URL-адреса длиннее (300) в другую таблицу, так как там больше99,9% URL-адресов не такие длинные, и я не хочу превышать ограничение в 900 байт.Это хорошая практика?

РЕДАКТИРОВАТЬ:

Короче говоря.Как бы вы сохранили эту закладку

BBC Homepage title
http://www.bbc.co.uk/

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

1. 'homepage'
2. 'bbc.co'
3. 'www.bbc.co'

1 Ответ

1 голос
/ 05 сентября 2011

1) Если вы используете SQL Server 2005 (или SQL Server 2008/2008 R2), вы можете настроить функцию полнотекстового поиска по столбцам URL, чтобы избежать использования оператора LIKE в целом (событие% bbc).% займет намного меньше времени сейчас).

Теперь, если вы настроили полнотекстовый поиск по заголовку и полный URL-адрес, вы можете использовать пункт содержит SQL для поиска того, что вы ищете.

...