【问题标题】:Index in postgresqlpostgresql 中的索引
【发布时间】:2020-05-28 14:56:54
【问题描述】:

首先,我在数据库 USERS 中有一个表,其中包含近 3000 万条记录。我对每一列都有不同的索引。但是有些列只有 2 到 3 个非空值,而其他列是空值,但它们的索引大小仍然是 847 MB​​,比包含每行唯一值的一个索引小一点。

谁能知道为什么会这样?

其次,在 PostgreSQL 中,我们默认为每一列的主键索引都有一个索引,如果我们删除该索引会发生什么后果? 该索引的真正用途是什么? 由于我仅根据其他列中的值进行搜索,因此删除主键的索引是否安全?

【问题讨论】:

  • 如果您在句子中添加几个逗号,我们会更好地理解您。

标签: postgresql database-indexes


【解决方案1】:

NULL 值与所有其他值一样存储在索引中,因此第一部分不足为奇。

你不能删除主键索引,你可以做的是删除主键约束。但是你不能确定没有重复的行被添加到表中。如果您认为这没问题,请查看 the many questions 寻求帮助以解决该问题。

每个表都应该有一个主键。

但如果您不需要它们,get rid of some other indexes 可能是个好主意。

【讨论】:

    【解决方案2】:

    没有什么叫做主键索引,好像你在说唯一索引。 首先你需要了解主键和索引之间的区别。一个表中只能有一个主键。主键将是您每列的唯一标识符,并且不允许空值。索引用于加快对特定列的获取过程,如果它是唯一索引,则可以有一个空值。除了性能之外,删除表中的唯一索引不会影响任何事情。是否有索引是你的设计方式

    【讨论】:

    • "没有什么叫做主键索引" 我猜伊丽莎白指的是在声明主键时自动创建的唯一索引。所以从这个意义上说,是的,有一个“主键索引”
    • 正是@a_horse_with_no_name 感谢您的解释
    • "没有什么叫做主键索引,好像你在说唯一索引"。是的,即使我提到了唯一索引。从技术上讲,我们不能将其称为主键索引。索引不同于主键,主键可以是唯一的也可以是非唯一的
    猜你喜欢
    • 2021-06-16
    • 2018-04-15
    • 2014-08-06
    • 2018-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多