【发布时间】:2011-12-20 15:40:53
【问题描述】:
请找到以下用于在数据库 xml 列中搜索关键字的查询
显示的查询用于从 SQL Server 的 xml 列中搜索名称、单词或简介。使用的 CMS 是 Umbraco。
查询最初是在数据有限时设计的。
现在数据库有数百万条记录,查询超时无法获取数据。 该查询还优先考虑检索搜索结果的顺序为 in 如果返回 Name 字段数据搜索结果,则返回 CASE 1 else 根据搜索数据返回
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 列中搜索数据的解决方案。除了从列中检索数据之外。
当在前端点击搜索按钮而不输入任何关键字时,点击操作必须从数据库中检索所有项目。
提前致谢
【问题讨论】:
-
向我们展示您的 XML 可能是什么样子!
-
我无法从我所在的地方访问数据库。我引用的 xml 列是 Umbraco CMS 默认创建的“cmscontentxml”是表名。
-
没有 XML 文档,就没有什么可优化的。请提供 XML 文档(一个典型的例子),使这个问题有意义。
-
001F - 234sfsnhgnm
- 这个是否有可用的样本数据。谢谢
标签: sql xml sql-server-2008 xquery