什么时候我们应该在模型字段上定义db_index=True?我正在尝试优化应用程序,我想了解更多关于db_index的信息,我们应该在哪些条件下使用它?文档中说,在模型字段上使用db_index=True是为了加快查找速度,但在存储和内存方面略有不足。我们应该只在那些具有唯一值的字段上使用db_index=True吗?比如主字段id。如果我们为那些不唯一且包含重复数据的字段启用索引,会发生什么?
db_index=True
db_index
id
aiqt4smr1#
我会说,当你有一个快速查找的字段时,你应该这样做。例如,你有一个customers的表,其中有许多users。代表用户的每一行都有自己唯一的user_id。当您创建索引时,会在DB中创建一个指针,指向存储数据的位置,以便下次查找不会花费太长时间。查看here以了解更多信息
customers
users
user_id
qnakjoqk2#
当你使用unique=True时,你应该使用db_index=True,使用它有一个特定的原因,通过使用这种方法,您可以提高一点点性能,当我们在SQL中执行查询时,查找是从上到下进行的Case:'Without db_index= True':即使我们找到了数据,它也会搜索并过滤到所有底部行Case:'With db_index= True':当对象发现它只会停止他们的它会提高一点性能
unique=True
jtw3ybtb3#
当你在某个字段上设置db_index=True时,基于该字段的查询会快得多O(log(n))而不是O(n)。在幕后,它通常使用B-Tree实现。这些加速查询的代价是增加了内存使用和写入时间。因此,索引的最佳用例是如果您有一个读取量很大的数据库,并且经常被非主要字段查询。
3条答案
按热度按时间aiqt4smr1#
我会说,当你有一个快速查找的字段时,你应该这样做。
例如,你有一个
customers
的表,其中有许多users
。代表用户的每一行都有自己唯一的user_id
。当您创建索引时,会在DB中创建一个指针,指向存储数据的位置,以便下次查找不会花费太长时间。查看here以了解更多信息qnakjoqk2#
当你使用
unique=True
时,你应该使用db_index=True
,使用它有一个特定的原因,通过使用这种方法,您可以提高一点点性能,
当我们在SQL中执行查询时,查找是从上到下进行的
Case:'Without db_index= True':即使我们找到了数据,它也会搜索并过滤到所有底部行
Case:'With db_index= True':当对象发现它只会停止他们的
它会提高一点性能
jtw3ybtb3#
当你在某个字段上设置
db_index=True
时,基于该字段的查询会快得多O(log(n))而不是O(n)。在幕后,它通常使用B-Tree实现。这些加速查询的代价是增加了内存使用和写入时间。因此,索引的最佳用例是如果您有一个读取量很大的数据库,并且经常被非主要字段查询。