问题背景:
个人博客系统,使用个人姓名的拼音字符串作为二级域名。
问题:
我以前大多是使用数字自增ID作为数据表的主键及关联键,但在个人博客中这样会产生一个问题:
每次读取数据时,要根据姓名拼音来转查找转换为数字ID。这显示增加了额外的工作。因此,我想把个人博客的主键及关键外键都使用这个拼音字符串,这样不使用额外参数(数字ID),也不需要额外转换ID,
就能够很方便地读取个人博客的所有内容。(因为域名中传递了这个参数)。要问的是:
1)使用字符串作为主表的主键,及大多数表的关联键(外键),会不会产生效率的问题?
因为数据表索引数字比索引字符串应该快很多。
2)这种场景下这么用合适吗?与节省的工作相匹配吗?是否得不偿失?谢谢

解决方案 »

  1.   


    我觉得不是增加冗余字段的问题,比如:
    DataSet = select * from table1 where name='abc';select * from table2 where name='abc';select * from table3 where name='abc';这里影响速度的,都是姓名字符串的索引,虽然除了用户表外的其他表里有自增ID主键,但是只有当选取单个记录的时候有用
      

  2.   

    得不偿失。
    用自增int做主键是非常高效、并且安全的。
    你所说的额外工作只不过是根据名字查一次id而已,这个操作的耗时基本可以忽略。而如果你采用自定义字符串来做主键及外键,不仅会降低系统性能,
    而且你得为了维护数据一致性付出不小的代价。
    比如你可能得使用事务或锁去处理多用户并发操作,
    可能得自己去验证唯一性、存在性等等。
      

  3.   

    今天说了。如果用ASC码表示数字就可以避免字符串的直接增减了。嘎嘎