2011-12-20 2 views
0

Вы можете найти следующий запрос, который используется для поиска ключевых слов в столбце XML базы данныхXQuery - Поиск в XML-столбец в таблице

Показанная запрос используется для поиска по имени, слова или краткое из XML в SQL Server. Используемая CMS - Umbraco.

Запрос был спроектирован первоначально, когда данные были ограничены.

В настоящее время база данных содержит миллионы записей и время запроса не позволяет получить данные. Запрос также определяет приоритетность порядок, в котором результаты поиска будут получены в , если результат поиска данных Имя поля возвращается Случай 1 возвращается еще в зависимости от поиска данных возвращается

 SELECT Name,word,brief,    */Selecting Values */ 
    CASE 
     WHEN Name like '%' THEN 1  */Prioritizing Order in which data to be seen */ 
    WHEN word like '%' THEN 2 
    WHEN brief like '%' THEN 3 
    END AS Search 
    from 
     (select         
      A.xml.value('(//@node)[1]','nvarchar(20)') as Name, /* XQuery */  
      A.xml.value('(//word)[1]','nvarchar(225)') as word, 
      A.xml.value('(//brief)[1]','nvarchar(max)')as brief 
    from 
     (Select Convert(xml, xml) AS XML 
      from [dbo].[cmsContentXml]) AS B 
      Cross Apply xml.nodes('//items/item') AS A(xml)) D 
     where ((Name like '%')         /*Condition */ 
       OR(word like '%') 
       OR(brief like '%')) 
      group by word,Name,brief 
     order by 3 ASC 

Пожалуйста, помогите с решение по оптимизации или перезаписи этого запроса для поиска данных в столбце xml. Кроме того, помимо получения данных из столбца.

Если на лицевой стороне кнопка поиска нажата без ввода какого-либо ключевого слова, операция клика должна извлекать все элементы из базы данных.

Заранее спасибо

+0

Покажите нам, как может выглядеть ваш XML! –

+0

Я не могу получить доступ к базе данных из того места, где я нахожусь. Столбец xml, на который я ссылаюсь, так же создается по умолчанию Umbraco CMS «cmscontentxml» - это имя таблицы. – Gallop

+0

Без XML-документа оптимизировать нечего. Пожалуйста, предоставьте XML-документ (типичный пример), чтобы сделать этот вопрос значимым. –

ответ

0

Во-первых, не позволяют поиск без каких-либо ключевого слова, направить пользователя на механизм просмотра вместо этого. Нет смысла иметь накладные расходы поискового запроса, если нечего искать.

Second, Select Convert (xml, xml) - лишние накладные расходы, столбец базы данных должен быть xml, если он хранит xml. Наличие столбца с типом xml также позволяет вам размещать на нем xml-индексы, которые помогут ускорить процесс. См. http://msdn.microsoft.com/en-us/library/ms191497.aspx для получения дополнительной информации о XML-индексах. Кроме того, без преобразования вам больше не нужно сохранять это как подзапрос.

В-третьих, не используйте синтаксис ORDER BY 3, используйте имя столбца. ORDER BY 3 не является стандартом ANSI, а также может вызвать проблемы с ремонтопригодностью.

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

В-пятых, избегайте односимвольных псевдонимов, это еще одна проблема ремонтопригодности.

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