Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
rere1234 Member Откуда: Сообщений: 38 |
Доброе время суток уважаемые форумчане, Столкнулся с не тривиальной для себя задачей настройки полнотекстового поиска, как альтернативой использованию оператора like(он отрабатывал крайне медленно). Характеристики системы: Microsoft SQL Server 2012 - 11.0.5058.0 (X64) May 14 2014 18:34:29 Copyright (c) Microsoft Corporation Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor) Схема таблица по которой планируется производить создание индекса: CREATE TABLE [dbo].[Data]( [Id] [bigint] IDENTITY(1,1) NOT NULL, [DataDateTime] [datetime2](7) NOT NULL, [Field1] [smallint] NULL, [Field2] [tinyint] NOT NULL, [Field3] [tinyint] NULL, [Field4] [real] NULL, [Field5] [bit] NOT NULL, [Field6] [bit] NOT NULL DEFAULT ((0)), [Field7] [tinyint] NULL, [FullTextSearchColumn] [varchar](20) NOT NULL, [FullTextSearchColumnReverse] [varchar](20) NOT NULL, [Field8] [nvarchar](1000) NULL, CONSTRAINT [PK_DATA] PRIMARY KEY NONCLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [fgDataPrimaryIndex] ) CREATE CLUSTERED INDEX [CIX_Data_DataDateTime] ON [dbo].[Data] ( [DataDateTime] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 100) on [fgData] Число записей ~2 млрд. Таблица секционирована по полю DataDateTime по дням, среднее число записей в секции ~5 млн - то число записей которое попадает в систему за день (вставка производится BULK INSERT). Поиск планируется производить по полям [FullTextSearchColumn] и [FullTextSearchColumnReverse], в которых хранится строка символов и та же строка с байтами в обратном порядке (Reverse()). Таблица изредка грузится запросами Select. Update используется очень редко Планируемые скрипты по созданию полнотекстового индекса: CREATE FULLTEXT CATALOG FullTextSearchCatalog WITH ACCENT_SENSITIVITY = OFF DROP FULLTEXT INDEX ON [dbo].[Data] CREATE FULLTEXT INDEX ON [dbo].[Data] (FullTextSearchColumn, FullTextSearchColumnReverse) KEY INDEX PK_DATA ON ([FullTextSearchCatalog], FILEGROUP [fgFullTextSearch]) WITH (CHANGE_TRACKING = AUTO, STOPLIST = OFF, SEARCH PROPERTY LIST = OFF) Все запросы на выборку имеют вид Select top(6000) * from Data where -- условия по любым из полей order by DataDateTime desc Хотелось бы услышать мнение людей имеющих опыт решения схожих задач. И вообще справится ли с такими нагрузками компонент FullTextSearch? С каким интервалом будет отрабатывать автоматическое обновление индекса? Заранее спасибо за ответы |
14 янв 15, 17:38 [17118516] Ответить | Цитировать Сообщить модератору |
sub zero -275
Guest |
rere1234, Покажите предикат like который тормозил. А лучше планы выполнения. если это: like '%что то там%' то оно и будет тормозить, если like 'что то там%' то поможет индекс, если like '%что то там' то поможет индекс в обратном порядке. FTS не поможет. он делает лингвистической поиск. с поиском '%чт-то там' и like '%что-то там%' у него еще хуже, он может только 'что-то там%'. |
14 янв 15, 17:45 [17118542] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8494 |
rere1234, если Вы собираетесь искать произвольные подстроки, а не по словам, то Вам ничего не поможет в простом случае. |
14 янв 15, 17:51 [17118574] Ответить | Цитировать Сообщить модератору |
rere1234 Member Откуда: Сообщений: 38 |
sub zero -275, Проблемы как раз были с like вида '%X%' который вызывал fullscan таблицы. Использовать FTS я хотел именно для поиска 'X%'. Чтобы не делать '%X' хотел использовать поиск по инверсному полю [FullTextSearchColumnReverse], по которому также смогу делать поиск 'X%'. Ну а для варианта '%X%' оставить использование like. Идея с FTS появилось по причине выигрыша по скорости поиска на сравнительно небольшой тестовой базе (10 млн записей). |
14 янв 15, 17:54 [17118594] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31824 |
На всякий: http://msdn.microsoft.com/ru-ru/library/ms142571.aspx А вот тут есть некоторые формулы: http://msdn.microsoft.com/ru-ru/library/ms142560.aspx Может, помогут оценить производительность и потребности в ресурсах. А то, бывает, вроде бы не такая большая таблица, и сервер не загружен, а скорость индексации маленькая. Сам я на таких таблицах FTS использовал, но время уже прошло, не помню деталей (вроде всё было быстро, не было проблем). |
||
14 янв 15, 17:59 [17118623] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31824 |
Для варианта '%X%' FTS поможет, только если вы ищите целиком по словам. Если искать по произвольной части слов в тексте, то и FTS будет бессилен. Тогда только делать самодельный поиск (можно воспользоваться наработками Dmitriy Kostylev, поищите, но что то их удалили отовсюду :-( ) |
||
14 янв 15, 18:09 [17118677] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
Может как раз ваш случай Тынц |
15 янв 15, 10:03 [17120723] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31824 |
Сейчас просит создать вики-аккаунт, кнопки "создать" нету, она невидима, если её всё таки найти и нажать, возвращает в эту же форму, никаких сообщений об ошибке естественно нет. Из нескольких браузеров пробовал, само собой. Деградация, раньше у МС были лучшие в индустрии порталы и хелп, постепенно всё убивается... |
||
15 янв 15, 10:43 [17120973] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
alexeyvg, упс сорри не проверил,оно у меня в Избранных в спец папке лежит - просто перепечатал сюда и все :( А жаль если не работает |
15 янв 15, 10:45 [17120985] Ответить | Цитировать Сообщить модератору |
мимокрокодил83284
Guest |
Maxx, у мены тынц открылся |
15 янв 15, 10:47 [17121001] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
ну так если не сложно - заверните в спойлер и выложите сюда. |
||
15 янв 15, 10:48 [17121007] Ответить | Цитировать Сообщить модератору |
мимокрокодил83284
Guest |
|
|||||
15 янв 15, 10:58 [17121042] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31824 |
Это просто криворукие программисты у них теперь, а менеджеры уже как несколько лет перестали отвечать за результат. Надо же, додуматься, при совершении действия пользователем (заполнении профиля пользователя) они не возвращают результат, а выводят опять ту же страницу :-) Извините за оффтроп, конечено. Спасибо за выложенный код, я вот собственно его выше и предлагал использовать. К сожалению, из ресурсов msdn, на которые были ссылки из sql.ru, его удалили (ну, тоже см. выше про криворукий МС - ссылки там теперь больше нескольких месяцев не живут). |
||
15 янв 15, 11:10 [17121146] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
alexeyvg,
|
|
15 янв 15, 12:08 [17121519] Ответить | Цитировать Сообщить модератору |
ЕвгенийВ Member Откуда: Москва Сообщений: 4968 |
У меня все прекрасно работает... Даже многие исходники на их TFS лежат. |
||
15 янв 15, 16:40 [17123415] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
ЕвгенийВ, а suppport у вас открывается? у меня, например, https://support.microsoft.com/kb/815436?wa=wsignin1.0 сегодня весь день думает К сообщению приложен файл. Размер - 74Kb |
15 янв 15, 17:09 [17123612] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |