我在问这个问题,希望有更高效(更快)的方式来拉动和插入我正在使用的表格中的数据。
数据表的基本结构是
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参数将列表限制为项目(例如库存或低于价格),这是一个慢查询。索引并不多。
无法更改数据模型,提取大量信息的最佳方式是什么?