1

我问这个问题是希望有一种更有效(更快)的方法可以在我正在使用的表中提取和插入数据。

数据表的基本结构是

    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 参数将列表限制为项目(例如有库存或低于价格),因此查询速度很慢。索引并不多。

在无法更改数据模型的情况下,提取大量信息的最佳方式是什么?

4

0 回答 0