Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Django:高效的数据库搜索_Database_Django - Fatal编程技术网

Database Django:高效的数据库搜索

Database Django:高效的数据库搜索,database,django,Database,Django,我需要一种有效的方法来搜索我的模型以找到一个特定的用户,下面是一个列表 用户-用户列表及其姓名等 事件-所有用户的事件表,在用户不可用时打开 技能与用户的多对多关系,用户可以拥有很多技能 合同与用户多对一,用户可以处理多个合同,每个合同都有评级(如果完成) ... 等等 因此,我得到了许多链接到用户表的表。我需要搜索一组符合特定条件的用户;例如,他从下周四到周五都有空,有x/y/z技能,所有完成的合同平均得分为4分 有什么方法可以有效地进行搜索,同时最大限度地减少我访问数据库的次数?抱歉,如果这

我需要一种有效的方法来搜索我的模型以找到一个特定的用户,下面是一个列表

用户-用户列表及其姓名等
事件-所有用户的事件表,在用户不可用时打开
技能与用户的多对多关系,用户可以拥有很多技能
合同与用户多对一,用户可以处理多个合同,每个合同都有评级(如果完成)
... 等等

因此,我得到了许多链接到用户表的表。我需要搜索一组符合特定条件的用户;例如,他从下周四到周五都有空,有x/y/z技能,所有完成的合同平均得分为4分

有什么方法可以有效地进行搜索,同时最大限度地减少我访问数据库的次数?抱歉,如果这是一个非常新的问题


谢谢

不确定此方法是否能解决所有4种情况下的问题,但至少在第一种情况下它能帮助您高效地查询用户数据

我通常发现使用
values
values\u list
查询函数更快,因为它精简了实际SQL的
SELECT
部分,因此可以更快地获得结果。对此,

还值得一提的是,从
values
values\u list
中的新开发版本开始,您可以查询任何类型的关系,包括多对一关系


最后,您可能会发现批量中的
也很有用。如果我执行复杂的查询,您可能会尝试首先使用
值列表
查询某些模型的ID,然后使用
批量
以更快地获取模型实例。关于这一点。

我看到的唯一选择是非规范化。试试,基准测试,选择最有效的。所以这是在读取速度和存储(也包括写入速度)之间的折衷,对吗?我想我想尝试的是两步搜索,两次点击数据库,但减少搜索集;首先搜索可用性,然后只搜索可用性、其他技能/评级等标准。这不是一个理论问题,你需要基准测试。有时几个单独的查询比复杂的查询快,有时则不然。DB hit number本身不显示任何内容,3次索引查找可能比1次包含联接和子查询的繁重查询快。如果我们可以看到您的模型,我们会发现更容易对如何创建最小查询集以及您现在要做的事情进行评论。请注意,您可以通过跨越关系的查询进行筛选,这肯定有助于减少数据库命中数。我正在编写代码,一旦完成,我将在这里发布。谢谢你的评论!