Indexing postgresql索引使用-优缺点

Indexing postgresql索引使用-优缺点,indexing,postgresql,Indexing,Postgresql,我使用python/django作为编程语言/框架。我需要知道的是关于postgresql和索引 对于那些使用django的人来说,他们可能知道内容类型和django管理日志。但很快,管理日志记录用户操作。我还使用它记录站点内执行的所有操作。所以它有1.000.000多条记录。我使用sql查询来过滤结果,在这里还可以 问题是,我使用两个字段从不同的表中选择数据。其中之一是content type,它存储相关的数据库表信息,并对字段进行索引 另一个字段是,objectid,它存储相关对象的id,字

我使用python/django作为编程语言/框架。我需要知道的是关于postgresql和索引

对于那些使用django的人来说,他们可能知道内容类型和django管理日志。但很快,管理日志记录用户操作。我还使用它记录站点内执行的所有操作。所以它有1.000.000多条记录。我使用sql查询来过滤结果,在这里还可以

问题是,我使用两个字段从不同的表中选择数据。其中之一是content type,它存储相关的数据库表信息,并对字段进行索引

另一个字段是,objectid,它存储相关对象的id,字段类型是varchar,字段没有索引

用法示例如下:

Select from django_admin_log where content_type_id=15 and object_id="12343545";
由于content_type_id=15点我的blog_text表,并且相关对象的id是12343545,所以我可以很容易地获得相关数据

但object_id并没有索引,并且表有1.000.000+条记录,像我上面写的这样的查询需要大量的执行时间

在object_id中使用索引的优点和缺点是什么?这些优点会比缺点更大吗

更新:我没有管理日志表的更新。它只记录每个用户操作。。。每天向表中插入40.000-45.000条记录。系统在一天的2/3时间里非常繁忙,大约15-16个小时(从早到晚)。因此,在上午8点到晚上11点期间插入了45000条记录

因此,从这个角度来看,如果我创建索引,会不会导致太多的数据库过载

更新2:还有一个问题。另一个包含2.000.000+条记录且带有布尔字段的表。字段类似于“wwill it be display”,它与其他筛选条件一起使用。为这样的布尔字段创建索引是否合乎逻辑

第二个条件是,在一个包含1.000.000条记录的表中同时索引布尔值和日期时间字段

对这两种情况使用索引是好主意还是坏主意

在对象id中使用索引的优点和缺点是什么

好处是查询速度更快。缺点是插入速度较慢

利大于弊吗

我敢说是的,他们会的,因为更快的页面加载带来的谷歌广告收入的增长肯定值得你在发布博客时多等一秒钟

更新:

从您的帖子中,我可以得出结论,该表在高峰时间每秒接收大约4条记录

4在
1M
表上记录一秒钟对任何一台像样的服务器来说都不是问题,所以我相信您可以安全地创建索引


最好在
(object\u id,content\u type\u id)

上创建一个复合索引,以便澄清

对于这个特定的SQL,您应该使用一个包含两列(
content\u-type\u-id
object\u-id
)的索引——串联索引

在这种情况下,您可以删除仅位于
content\u-type\u-id
上的现有索引——新索引将能够为仅过滤
content\u-type\u-id
的查询以及过滤两列的查询提供服务

两个索引——仅在
object\u id
上的现有索引和新索引——可能不会为该查询提供最佳结果

编辑:如果通过
object\u id
列扩展现有索引,插入的性能损失可以忽略不计,但您的选择将运行得更快

编辑2:如果您有这样的语句

WHERE bool = true
还有一个是这样的:

WHERE bool = true AND date > something
我建议先在BOOL上建立一个连接索引,然后再在DATE上建立索引

用于不等式比较的列应移到索引末尾

但是,根据您的数据,不为BOOL字段编制索引可能是有意义的。e、 g.如果所有行的95%都为true,则上述语句不会过滤太多。在这种情况下,索引可能会降低select语句的性能。然而,一个好的优化器只会忽略索引。但插入/更新/删除成本仍将保持不变



阅读更多信息。

要补充Quassnoi的答案,一般情况下,您也会关注更新,但从您的情况来看,我怀疑对象id是否会得到更新。从你的情况来看,唯一受插入和更新影响的是你,所以这似乎是一个安全的赌注,让你的用户拥有速度。