但是,具有identity特性的字段,不需要具有唯一性,更不必须是主键。

可以通过,set identity_insert tablename (on|off),在运行时控制,是否可以在identity字段中指定值,而不是由系统自动的插入值。

那么,这有什么用处呢。举个例子来说,两个用户之间的聊天,可以有多次,这个用一个chatsession来表示。在数据库中,我们需要三个表: user, chatsession(sessionid identity,...), user_chatsession (userid, sessionid, ...), 来表示这个关系。这里面,多出了一个表chatsession, 其主键sessionid具有identity特性,并且在user_chatsession中被引用。

但是,我们知道,数据库写操作比读操作的开销要大很多,如果我想做优化,把chatsession整个的去掉,那应该怎么做呢.

这时,就会用到我说的这一点。首先把 user_chatsession 中的sesssionid变成identity 字段,在插入一个session中的第一个 user-session (for user a)记录时,让系统产生sessionid, 然后记录下这个sessionid, 在插入一个session中后续的 user-session (for user b, user c...), 执行set identity_insert tablename on,就可以把先前记录的sessionid值插入。

还有另外一个方法,比较笨一点,就是用 select max(sessionid) + 1 from table where userid = @useridA,来获得要新插入的sessionid, 这种方法性能上显然差了许多。

更多相关文章

  1. Android(安卓)初识Retrofit
  2. android图片上传springMvc
  3. android 之simpleAdapter详解
  4. Android(安卓)微博登录
  5. Android中读取电话本Contacts联系人的所有电话号信息
  6. Android模拟 HTTP multipart/form-data 请求协议信息实现图片上
  7. Android模拟 HTTP multipart/form-data 请求协议信息实现图片上
  8. Android中读取电话本Contacts联系人的所有电话号信息
  9. Android中读取电话本Contacts联系人的所有电话号信息

随机推荐

  1. Android 的Platform version 和 API Leve
  2. Android xml ListView 的divider属性
  3. [Android各版本特性]Android 7.0 Nougat
  4. Android自学笔记(番外篇):全面搭建Linux环境
  5. android布局属性预览
  6. Android实现文件夹目录选择器
  7. android Java 笔试考题
  8. android appos 笔记
  9. [长姿势了]android:padding和android:mar
  10. Android Activity onConfigurationChange