Sql 两个外键表的过滤器工作缓慢
*相应地,我不能添加代码,因为我不在那台计算机附近 简单模型包括:Sql 两个外键表的过滤器工作缓慢,sql,django,performance,database-design,Sql,Django,Performance,Database Design,*相应地,我不能添加代码,因为我不在那台计算机附近 简单模型包括: 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 我做了一个查询,返回上面的列
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的测试结果上使用它,需要一分钟以上的时间。从你的问题中很难知道你在处理什么,无论是代码、数据库本身还是查询,所以这只是我的最佳猜测 如果导致在循环中执行查询,则存在N+1查询问题。从这些数据来看,您可以改为执行联接。但是,我不太确定您的数据库结构是什么样的,或者您希望查询返回什么样的结果,因此我无法为您提供SQL解决方案。我要说的是:许多数据库不会自动向外键列添加索引。因此,我建议采取以下步骤:
数据库在处理复杂查询和返回大量数据方面出人意料地高效。如果在循环中进行查询,则可能要花费大部分时间生成和解析SQL,并将数据编组到数据库和从数据库编组数据。使用返回大结果的大查询通常比重复使用返回小结果的小查询要高效得多。我添加了索引,因为ORM,我使用了循环。但我认为我将只使用一个SQL查询而不是ORM,因为它非常糟糕。ORM有两种基本风格:无所不能和轻量级。大多数轻量级ORM(我一直认为Django属于这一类)鼓励在SQL提高性能时直接将SQL传递到后端。您应该像现在一样包含模型的代码和查询,否则您收到的所有答案都只是推测性的!