首页 > 解决方案 > 使用表数百万数据查询 orm

问题描述

我需要建议,以便我的查询更快,它需要太多并且除了片段之外,我的表已经包含数百万个数据,当有数百万个数据时,这是这种情况的最佳选择。我已经应用了进程、索引的创建,但查询速度仍然很慢

pool = mp.Pool(processes=mp.cpu_count())
results = pool.map(filtar_query,json_f) 
def filtar_query(args):

   fecha, argumentos = args[0], args[1]
   query = Modelo.objects.only('fecha','campo2','campo3').filter(fecha__date=fecha).filter(**argumentos).values('fecha','campo2','campo3')
   df= pd.DataFrame(query)
   df = df.groupby(fecha) 

在花费太多时间的部分是提出建议会给我的查询

标签: pythondjango

解决方案


您将要使用values而不是only. ORM 中的only子句为每条记录创建一个实例,其中values返回所有值的字典。

确保filter子句中的所有列都有索引。

query = Modelo.objects.values(
    'fecha','campo2','campo3'
).filter(
    fecha__date=fecha,
    **argumentos,
)

值得查看实际生成的 SQL,并运行EXPLAIN以查看查询变慢的位置,以确保您创建了正确的索引以避免全表扫描。


推荐阅读