【问题标题】:XQuery - Search within XML Column in TableXQuery - 在表中的 XML 列中搜索
【发布时间】: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 文档(一个典型的例子),使这个问题有意义。
  • 001F234sfsnhgnm - 这个是否有可用的样本数据。谢谢

标签: sql xml sql-server-2008 xquery


【解决方案1】:

首先,不允许没有关键字的搜索,而是将用户引导至浏览机制。如果没有可搜索的内容,那么搜索查询的开销是没有意义的。

其次,Select Convert(xml, xml) 是不必要的开销,如果是存储 xml,你的数据库列应该是 xml。使用 xml 类型的列还允许您在其上放置 xml 索引,这将有助于加快速度。有关 XML 索引的更多信息,请参阅 http://msdn.microsoft.com/en-us/library/ms191497.aspx。此外,如果没有转换,您不再需要将其保留为子查询。

第三不要使用 ORDER BY 3 语法,使用列名。 ORDER BY 3 不是 ANSI 标准,也可能导致可维护性问题。

第四,您的 xml 示例数据似乎是无效的 xml(简要的未封闭数据标签,id 没有结束元素,块没有开始元素)。请检查您的数据,如果它确实像真实数据库中那样损坏,则需要修复它,因为错误的 xml 会减慢节点搜索速度。

第五,避免单字母别名,这是另一个可维护性问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2011-08-31
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多