多个连接的高效MySQL查询方法

时间:2013-07-01 16:28:59

标签: mysql performance select join

我在问这个问题,希望有更高效(更快)的方式来拉动和插入我正在使用的表格中的数据。

数据表的基本结构是

    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参数将列表限制为项目(例如库存或低于价格),这是一个慢查询。索引并不多。

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

0 个答案:

没有答案