2011-07-19 38 views
0

* corrently我不能,因为我不是计算机附近添加代码滤镜慢

简单模型包括:

class Test 
    static data about test 
class Site 
    static data about site 
class Result 
    foreign key Site 
    foreign key Test 
    startTime 
    result 

参数:

listTest, 
    listSite, 
    listStatus 

我做了一个查询,返回上面的列表 返回测试查询表示需求的交集。

我现在想要做一个查询
与同一给定名单
只有测试最后结果是listStatus

我一个for循环,如果我使用由返回它在5K以上的测试结果上需要一分钟以上的时间。

+0

您应该包括模型的代码以及现在的查询,否则您收到的所有答案都只是推测! –

回答

1

从你的问题很难知道你在处理什么,无论是在代码,数据库本身和查询方面,所以这只是我最好的猜测。

如果您导致查询在循环内执行,您有N + 1个查询问题。从这些数据看来,您可以改为进行连接。但是,我不太清楚你的数据库结构是什么样的,或者你希望你的查询返回什么,所以我不能给你一个SQL解决方案。我会这样说:许多数据库不会自动向外键列添加索引。因此,我建议以下步骤:

  1. 确保对结果都表外键列分别索引。如果没有这个,加入表现将受到影响
  2. 重写你的循环来改为对数据库执行一个查询。

数据库在处理复杂查询和返回大量数据方面效率惊人。如果您在循环查询,您可能会花费大部分时间来生成和解析SQL,并将数据编入数据库和从数据库编组数据。使用返回大量结果的大型查询通常比反复使用返回小型结果的小型查询效率更高。

+0

我已经添加了索引,因为ORM我使用了一个循环。但我想我只会使用一个SQL查询而不是ORM,因为它太糟糕了。 – shevski

+1

ORM有两种基本口味:全能和轻量。大多数轻量级的ORM(我一直认为Django属于这一类)鼓励将SQL直接传递到后端,以提高性能。 –