3

我有一个查询以下列格式返回约 100 万行:

data = [[i['field1'], i['field2']] for i in tbl.where(conditions)]

并且需要超过 5 分钟。

当我自己尝试时tbl.where(conditions),查询花费了不到一秒的时间,所以大部分时间似乎都花在了迭代列表理解中的行上。

有没有更快的方法从查询中检索 field1/field2?(我有足够的 RAM 将结果存储在内存中)

4

1 回答 1

0

我对你的“tbl”一无所知,但这里有一些我会看的东西:

  1. 您的表是否使用压缩?print tbl.filters.complevel
  2. 假设您的“条件”取决于表字段,您是否为这些字段创建了索引?print tbl.indexedcolpathnames
  3. 如果你使用idx = tbl.get_where_list(conditions),tbl[:]['field1'][idx]
  4. 如果您有足够的 RAM,请尝试在内存中打开文件:
    h5file = tables.open_file('myfile.h5', driver="H5FD_CORE")
    tbl = h5file.root.tbl看看是否有帮助。
于 2013-11-14T19:42:21.130 回答