mysql - MySQL 选择查询上的 XML 解析和查询
问题描述
我有一个表,我们有超过 20 亿行,我的搜索总是基于索引字段。
没有什么需要尝试的新方法是获取存储在 longtext 和 varchar(4000) 列中的 xml 字符串的字段。这两个列都存储 xml 文件,一个是大 xml 文件,另一个是小 xmls 文件。
我需要查询 xml 文件中的节点或文件。
例如,我需要获取第一个 xml 文件(DS 列第 6 列)中存在的 statusCode 和第二个 xml 文件(SY 列最后一列)中存在的 providerT
搜索将始终基于作为索引列的 CT_ID 然后在 DS SY 列上进行。
所以我正在搜索类似的查询
从 AD_TABLE 中选择 *,其中 CT_ID ='6ththeurtyiru' 和 DS.statusCode='COMPLETED' AND SY.providerT='noOfNRe';
我知道我的查询是错误的,但是如果我有 json 这可以工作,但是我们在 MySql 中是否有任何这样的 xml?
我做了一些搜索,但查询看起来非常难以理解,特别是解析查询。
有人可以帮我解决这个问题吗?
ID,VERSION,AN_TYPE,EN_TYPE,CT_ID,DS,OT_TYPE,DATE_TIME,GP_ID,OT_NAME,OT_ID,UR_NAME,UR_ID,PT_ID,NS,SY
6uyuitygjh82mcrzz,0,SD_CASE,MYCHECK,6ththeurtyiru
,<?xml version="1.0" encoding="UTF-8" standalone="yes"?><sCPayload><cId>suerywe7r-21cf-4c7e-8071-suerywe7r</cId><statusCode>COMPLETED</statusCode><sngState>INPROGRESS</sngState><noOfNRe>1</noOfNRe><noOfRRR>0</noOfRRR><noOfER>0</noOfER><noOfARR>1</noOfARR><providerT>WATCHLIST</providerT></sCPayload>,CASE,9/16/2020 9:45,bd7c9519-d726-4672-8599-83d21927bec5,,5f53b903-21cf-4c7e-8071-suerywe7r,System User,USER_SYSTEM,,,<?xml version="1.0" encoding="UTF-8" standalone="yes"?><screenCES><providerT>MYWATCH</providerT><noOfNRe>1</noOfNRe></screenCES>,
解决方案
您还可以将提取的结果放在永久虚拟字段中。所以你可以建立一个索引或组合索引来获得一个快速的结果,而不是一个 FULL TABLE SCAN。如果您更改 XML,此字段将自动更新
将此字段添加到您的表
ALTER TABLE yourTable
ADD COLUMN
`statusCode` varchar(16) AS (ExtractValue(DS,'//statusCode')) PERSISTENT;
推荐阅读
- flutter - 如何在 Dart 中的函数中通过引用发送类字段(实际上是在 Flutter 中)?
- node.js - Discord.js 错误 Fontconfig 错误:无法加载默认配置文件
- terraform - terraform 资源共享
- python - 导入的函数正在执行两次
- c# - 在 C# 中调用 Clio API 时出现 401 未经授权的错误
- desktop-bridge - Win 10 S 模式:不符合自定义 1 签名级别要求或违反代码完整性策略
- office-scripts - Office Scripts: class constructor() does not work
- angularjs - How do I interpret this output from an NPM installation?
- excel - Excel VBA - 使用应用程序输入框获取用户选择的单元格 - 是否可以获取用户工作表详细信息?
- php - Bootstrap 4 drowdon link doesn't work when using switch/case php