加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

数据库 – string列上的postgresql索引

发布时间:2020-12-12 08:43:12 所属栏目:MsSql教程 来源:网络整理
导读:说,我有一张表ResidentInfo,在这个表中我有唯一的约束HomeAddress,这是VARCHAR类型.对于将来的查询,我将在此列上添加一个索引. 查询将只有操作=,并且我将使用B-TREE模式,因为当前不推荐哈希模式. 问题:从效率来看,使用B-TREE,你认为我应该添加一个新的列,数
说,我有一张表ResidentInfo,在这个表中我有唯一的约束HomeAddress,这是VARCHAR类型.对于将来的查询,我将在此列上添加一个索引.
查询将只有操作=,并且我将使用B-TREE模式,因为当前不推荐哈希模式.

问题:从效率来看,使用B-TREE,你认为我应该添加一个新的列,数字1,2,3 ….,N对应不同的homeaddress,而不是在HomeAddress中添加索引,我应该添加索引在数字列上?

我问这个问题,因为我不知道索引如何工作.

解决方法

对于简单的等式检查(=),varchar或文本列上的B-Tree索引是简单且最佳选择.它肯定有助于表现很多.

当然,一个简单整数的B-Tree索引表现更好.对于初学者,比较简单的整数值要快一些.但更重要的是,性能也是索引大小的函数.更大的列表示每个数据页的行数更少,意味着更多的页面必须被读取…

由于HomeAddress几乎不是唯一的,它不是一个很好的自然主键.我强烈建议使用替代主键. serial column是这个的明显选择.它的唯一目的是要有一个简单,快速的主键来处理.

如果您有其他表引用表,这将变得更加高效.除了为外键列重复冗长的字符串,您只需要一个整数列的4个字节.而且您不需要级联更新,因为一个地址一定会改变,而代理pk可以保持不变(但不一定当然).

你的桌子可能是这样的:

CREATE TABLE resident (
   resident_id serial PRIMARY KEY,address text NOT NULL
   -- more columns
);

CREATE INDEX resident_adr_idx ON resident(address);

这导致两个B-Tree索引.一个关于resident_id的唯一索引和一个简单的地址索引.

More about indexes in the manual.Postgres提供了很多选择 – 但是您不需要再为这个简单的例子.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读