У меня есть интересная проблема, возникающая в Microsoft SQL при поиске в поле TEXT.У меня есть таблица с двумя полями, Id (int) и Memo (текст), заполненная сотнями тысяч строк данных.Теперь представьте запрос, например:
SELECT Id ИЗ таблицы, где Id = 1234
Довольно просто.Предположим, есть поле с идентификатором 1234, поэтому оно возвращает одну строку.Теперь давайте добавим еще одно условие к предложению WHERE.
SELECT Id ИЗ таблицы WHERE Id = 1234 И ЗАПИСЬ, КАК '% test%'
Запрос должен вытягиватьодну запись, а затем проверьте, существует ли слово «test» в поле «Memo».Однако, если данных достаточно, этот оператор будет зависать, как если бы он сначала искал поле Memo, а затем перекрестную ссылку на результаты с полем Id.
Хотя это то, что он, похоже, делает,Я только что обнаружил, что он на самом деле пытается создать статистику по полю Memo.Если я отключу «автоматическое создание статистики», запрос будет запущен мгновенно.
Итак, мой вопрос: как отключить автоматическое создание статистики, но только для одного запроса?Возможно, что-то вроде:
SET AUTO_CREATE_STATISTICS OFF
(я знаю, любой нормальный человек просто создал бы полнотекстовый индекс в этом поле и назвал бы его днем. ПричинаЯ не могу этого сделать, потому что в нашем центре обработки данных размещается приложение для более чем 4000 клиентов, использующих один и тот же дизайн базы данных. Не говоря уже о том, что эта проблема возникает в различных текстовых полях базы данных. Таким образом, это займет десятки тысячполнотекстовых индексов, если я пошел по этому пути. Не говоря уже о том, что добавление полнотекстового индекса добавило бы требования к хранилищу, изменениям в резервном копировании, изменениям процедуры аварийного восстановления, оформлению бумажной волокиты и т. д.) *