sql server XML数据类型存储,模糊搜索的性能如何提升?
最近有个项目,其中一个业务是客户输入的信息字段不固定(字段合集大概100多个,客户可能只会挑选其中5-15个填写),这里我使用的是动态XML存储客户数据,自然就想到了mssql里面的xml数据类型,研究了半天时间(其中xml主索引,xml辅助索引-path索引、value索引都加了),发现这个字段内容值模糊查找性能很差:1.测试了姓名节点模糊查找;2.测试了时间段的查找,运行结果如下(数据量测试环境下是200W条,实际项目上线运行数据量会以每月15W左右的量逐步增加):
SELECT * FROM dbo.user_info_xml WHERE info_xml.value('(/customers/user_name)[1]','nvarchar(50)') LIKE '%孙%' --19秒
SELECT * FROM dbo.user_info_xml WHERE info_xml.exist('/customers/user_name/text()[contains(.,"孙")]') = 1 --14秒
SELECT * FROM dbo.user_info_xml WHERE info_xml.value('(/customers/play_date)[1]','datetime') > '2015-3-21'
AND info_xml.value('(/customers/play_date)[1]','datetime') < '2015-3-24' --29秒