我正在做一个关于搜索引擎的研究项目,我遇到了 for 循环的性能问题。我有以下问题:
for value in hash_array.keys():
cell= db_conn.use_client().hql_query(db_conn.use_namespace(),'SELECT doc_text FROM SE_doc_text WHERE ROW=\"'+
value+"\" SCAN_AND_FILTER_ROWS LIMIT 1").cells
list_result[value].append(cell[0].value)
使用超表我希望获得最佳性能,但是当我在 hash_array.keys() 的 20.000 或 30.000 个元素上使用它时,我会得到 5-6 分钟的结果,所以速度非常慢。还有其他方法可以快速执行吗?或者我应该将我的计划 b 用于整个搜索引擎。
查询的性能:
Elapsed time: 0.10 s
Avg value size: 1428.00 bytes
Avg key size: 57.00 bytes
Throughput: 595190.38 bytes/s
Total cells: 1
Throughput: 400.80 cells/s
在硬件上测试:
8gb 1600mhz
1055t amd
附加事实:
Without SCAN_AND_FILTER_ROWS: 1.78163504601ms
With SCAN_AND_FILTER_ROWS: 3.27163504601ms
Only for loop: 0.0630ms
使用解决方案(来自答案)我有以下内容:
stringRow = ' AND '.join(["ROW = \""+value + "\"" for value in hash_array.keys()])
cell = db_conn.use_client().hql_query(db_conn.use_namespace(),stringBatch+stringRow).cells
Results: 0.355320930481ms for 2097 documents
1.0214779377 for 3565 documents
这很好,但不是最好的解决方案。