我问这个问题是希望有一种更有效(更快)的方法可以在我正在使用的表中提取和插入数据。
数据表的基本结构是
ID Doc_ID Field Value
1 10 Title abc
2 10 Abstract xyz
3 10 Author Bob
4 11 Publisher Bookworms
5 11 Title zzz
6 11 Abstract bbb
7 12 Title aaa
8 12 Sale No
换句话说,数据表是基于行的,每一行都包含一个文档 ID 和相应的字段值。并非所有文档都定义了相同数量的字段。事实上,书籍可能与杂志截然不同。
数据表有 10,000,000 行,通常一个文档有 100 个与之关联的字段。
因此,我发现的性能问题是参考 50 多个不同字段提取报告,例如,如果我在 order_table 中有一个查询列表,则查询可能类似于
select ord.number as 'Order ID', d1.value as 'Title', d2.value as 'Author' .......
from order_table ord
LEFT JOIN data_table as d1 on d1.Doc_ID=ord.Doc_ID and d1.Field='Title'
LEFT JOIN data_table as d2 on d2.Doc_ID=ord.Doc_ID and d2.Field='Author'
........
LEFT JOIN data_table as d50 on d50.Doc_ID=ord.Doc_ID and d50.Field='Qty'
使用 LEFT JOINS 不能保证该字段是为该文档定义的。
鉴于可能有一些 WHERE 参数将列表限制为项目(例如有库存或低于价格),因此查询速度很慢。索引并不多。
在无法更改数据模型的情况下,提取大量信息的最佳方式是什么?