我知道当我想加快对该列的搜索时,我会在列上添加索引。
这是一个示例模型
class Blog(models.Model):
title = models.CharField(max_length=100)
added = models.DateTimeField(auto_now_add=True)
body = models.TextField()
我需要查找title
和added
列,并且我应该在这些列上设置db_index=True
。
class Blog(models.Model):
title = models.CharField(db_index=True, max_length=100)
added = models.DateTimeField(db_index=True, auto_now_add=True)
body = models.TextField()
但我搜索有关更多示例的互联网资源,我仍然无法理解或总结如何使用它。设置db_index = True会什么时候/不合适?
答案 0 :(得分:3)
何时考虑向列添加索引?
通常,在决定向列添加索引之前,需要考虑许多点。
Oracle在其文档中定义了多个关于何时向列添加索引的准则: http://docs.oracle.com/cd/B19306_01/server.102/b14211/data_acc.htm#i2769
WHERE
子句中经常使用的键。UPDATE
语句以及修改索引表的INSERT
和DELETE
语句比没有索引时需要更长的时间。此类SQL语句必须修改索引中的数据以及表中的数据。它们还会生成其他撤消和重做。WHERE
子句中的键与函数或运算符一起索引。使用除WHERE
或MIN
之外的函数的MAX
子句或具有索引键的运算符不会使使用索引的访问路径(基于函数的索引除外)不可用INSERT
,UPDATE
和DELETE
语句访问父表和子表的情况下,考虑索引引用完整性约束的外键。这样的索引允许父表上的UPDATEs
和DELETEs
,而没有共享锁定子表。INSERTs
,UPDATEs
和DELETEs
的性能损失以及使用存储所需的空间指数。 请记住,当您添加其他索引时,Read操作会更快,但由于重新计算索引,Write操作会变慢。因此,请根据您的用例要求使用它们。
答案 1 :(得分:2)
使用索引的代价是写入性能较慢 - 假设您不太可能每0.0001发布一篇新博客帖子,您可以随意为您搜索的任何内容添加索引。