请教 primary key 使用 Varchar2 与 Char 差别有人知道吗 ?

baidu_23677379 2015-04-09 02:29:29
从以前就有这个疑问,但碍于开 Table 的 KEY通常几乎都是有规则的,且固定长度。

就也没想过这个问题

今天有个新专案,有一个主档的号码是不规则的

输入的值会介于 6~15个字元

1. 请问可以用 Varchar2 当 primary key 吗 ? 会不会有什么影响

2. 还是建议用 Sequences 当 primary key,上面那个不规则的值就当一般栏位,帮他建一个 index

...全文
256 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 2015-04-13
  • 打赏
  • 举报
回复
一般来讲,建议使用 varchar2 和 integer 来做为 PK 的数据类型。 如果你的 PK 经常发生变化,才会使用 char 类型。
baidu_23677379 2015-04-09
  • 打赏
  • 举报
回复
引用 3 楼 wildwave 的回复:
一样的。 索引是将数据按顺序排列,使得查询时能快速找到对应的rowid varchar2和char并不影响排序,对性能没有影响
原来如此 那这样不就全部宣告成 varchar2比较好,因为如果确定都不会补满的话,至少 varchar2 可以帮资料库省空间 ? 另外想问问 顺便问一下索引的原理,以前一位前辈跟我说运作方式是这样 ↓ 姓名 1 张 2 林 3 陈 4 张 5 张 Index 会将资料排成 林 张 张 张 陈 这时候找【张】的话 资料库会 第一步:第一笔开始一笔一笔,去找第一个姓张的资料→ 这时候会扫到2 第二步:从最后一笔开始一笔一笔,去找第一个姓张的资料 这时候会扫到 4 此时这样就会停止搜寻了! 因为资料库就很清楚知道,第 2~4 笔就是我们要的资料,Index 快的原因是在这里
小灰狼W 2015-04-09
  • 打赏
  • 举报
回复
一样的。 索引是将数据按顺序排列,使得查询时能快速找到对应的rowid varchar2和char并不影响排序,对性能没有影响
baidu_23677379 2015-04-09
  • 打赏
  • 举报
回复
[quote=引用 1 楼 wildwave 的回复:] 问题没看懂,char是固定长度的,长度不够用空格补上,varchar2是不固定长度的 这个我懂 我要要问的主要是说 所以意思是栏位用varchar2当 PK 跟 用 char 当 PK,栏位的长度一样的情况下效能完全没差搂 ? 因为我记得以前听说效能会有差 char会比较快
小灰狼W 2015-04-09
  • 打赏
  • 举报
回复
问题没看懂,char是固定长度的,长度不够用空格补上,varchar2是不固定长度的 下面问的,varchar2是字段的数据类型,sequence是用来生成唯一数字的对象,不是一种东西

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧