数据库中identity字段不必是系统产生的唯一值 性能优化方法(新招)_MsSql

但是,具有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, 这种方法性能上显然差了许多。

时间: 2024-11-05 22:34:29

数据库中identity字段不必是系统产生的唯一值 性能优化方法(新招)_MsSql的相关文章

comBox绑定SQL Server数据库中时间字段中的不重复的年份

  关于comBox绑定SQL Server数据库中时间字段中的不重复的年份如下: private void Education_Training_Load(object sender, EventArgs e) { MyDBase DB = new MyDBase(DBUser.sserver, DBUser.DBName, DBUser.suser, DBUser.spasswd); DataSet DS = DB.GetRecordset("select distinct (year(da

jsp-从数据库中取出数据对应的集合,在JSP页面中遍历出一个表格,数据库中的字段对应的是表格表头名

问题描述 从数据库中取出数据对应的集合,在JSP页面中遍历出一个表格,数据库中的字段对应的是表格表头名 从数据库中取出数据对应的集合,在JSP页面中遍历出一个注册项的列表,每一项都是从数据库中的表中取出的,比如,第一行为用户名,后面是个文本框,第二行是密码,后面还是个文本框,但是有的type是text,有的是password,上传文件对应的是file,如何才能动态解决这个问题,在页面中用foreach,只写一列数据,在页面中得到所有的注册项,这种方法如果不可行,那么请问各位大神,应该如何处理比较

php编程-怎样能时时监控数据库中一个字段的值并在小于某个数后发出报警

问题描述 怎样能时时监控数据库中一个字段的值并在小于某个数后发出报警 怎样能时时监控数据库中一个字段的值并在小于某个数后发出报警,比如传感器监测温度后会存入数据库,如果web管理后台监测到温度太高,就播放报警音乐.我用刷新页面来做,但是感觉不是那么回事啊,求指教

麻烦各位大神帮帮忙!C#解析xml实现对应数据库中的字段,导入excel数据到orcel数据库

问题描述 麻烦各位大神帮帮忙!C#解析xml实现对应数据库中的字段,导入excel数据到orcel数据库 我现在已经写好了导入数据库了,可是字段是定死的,预防有时候excel表格有变化,方便修改,所以解析xml,然后在xml对应字段,然后再导入到数据库中. 解决方案 用不着什么xml,根据你的需求,用一个简单的文本文件,每一行对应一个字段,和对应的excel列,然后程序读取下就可以了. 解决方案二: C#配置xml实现自动导入excel数据到数据库中对应的字段,麻烦各位大神帮帮忙!

请教select语句写法,数据库中学号字段第三位符合就选出。

问题描述 学号姓名--0408101张三*0408102张三*0407103张三0407101张三现在想把数据库中学号字段中第三四位为08的数据筛选出来(打*号的),这样的select语句该怎么写?高手指教! 解决方案 解决方案二:select*fromtabwheresubstring([学号],3,2)='08'解决方案三:select学号,姓名fromstuwheresubstring(convert(nvarchar(100),学号),2,2)='08'

如何将查询到底IP地址字符串转换为IP数据库中StartIP字段的9位数字

问题描述 我刚下载了全国IP数据库ACCESS求根据用户IP查询IP数据库中相应所在县的代码:IP数据库中的字段如下:IP_ID:1,2,3,.....TEL_ID字段的332等是什么意思啊StartIP:9位数字是什么意思啊?我知道一般IP是诸如255.365.69.25,怎么转换过来的啊查询到的IP是253.251.251.214,是字符串,而数据库中的IP是9位数字,请问如何把前者转换为后者形式在数据库中进行比较啊,请教了 解决方案 解决方案二:up,up解决方案三:up,up解决方案四:

Ajax获取数据库中的字段

ajax|数据|数据库 cs 返回数据库中的某个字段,你可以构造自己的字符  [Ajax.AjaxMethod()]   public  static string getDataSet()   {    SqlDataBase  SqlDB=new SqlDataBase(DSN);    string strsql=String.Format(" Select * From User Where IsPower=0","User");    DataSet ds

sqlserver replace函数 批量替换数据库中指定字段内指定字符串参考方法

语法 REPLACE ( 'string_e­xpression1' , 'string_e­xpression2' , 'string_e­xpression3' ) 参数说明 'string_e­xpression1' 待搜索的字符串表达式.string_e­xpression1 可以是字符数据或二进制数据. 'string_e­xpression2' 待查找的字符串表达式.string_e­xpression2 可以是字符数据或二进制数据. 'string_e­xpression3' 替换

sql server replace 批量替换数据库中指定字段内容

function replace(title) { replace(title,'aaa','bbbb') return(title) } bbb=replace(title) update ..... set title='"&bbb&"' asp教程 access <% Set Conn = Server.CreateObject("ADODB.Connection") Conn.Open "Provider=Microsoft.