当前位置:Gxlcms > 数据库问题 > SQL Server 数据库性能优化

SQL Server 数据库性能优化

时间:2021-07-01 10:21:17 帮助过:24人阅读

Declare @MoveRecords int --@CurrentPage和@PageSize是传入参数 Set @MoveRecords=@CurrentPage * @PageSize+1 --下面两行实现快速滚动到我们要取的数据的行,并把ID记录下来 Set Rowcount @MoveRecords Select @ID=ID from Table1 Order by ID Set Rowcount @PageSize Select * From Table1 Where ID>=@ID Order By ID Set Rowcount 0

四、数据库主键选取
常见的数据库主键选取方式有:
         ●自动增长字段
         ●Uniqueidentifier
         ●“COMB(Combine)”类型
1、自动增长字段
优点:
      (1)简单、效率高。
缺点:
      (1)自增一般使用int型,有数据条数的限制。
      (2)在数据库进行数据合并时会比较麻烦。
2、GUID
优点:
      (1)安全,保证唯一性。
      (2)不会产生自增字段那样数据合并时的问题。
缺点:
      (1)它的长度是16字节,占用大量存储空间。
      (2)该数据类型毫无规律,要在上面建立索引很耗时,所以效率要比使用自增字段低。
3、COMB
      考虑到上面两种主键类型的优缺点,这里使用COMB类型可以为两者找到了一个平衡点。它的设计思路是这样的:既然GUID类型无规律可言造成索引效率低下,影响系统的性能,那么能不能通过组合的方式,保留GUID前10个字节,用后6个字节表示GUID生成的时间,这样即保证了唯一性同时增加了有序性,以此来提高索引效率。后6字节的时间精度可以达到1/300秒,两个COMB类型数据完全相同的可能性是在这1/300秒内生成的两个GUID前10个字节完全相同,这几乎是不可能的。
(1)SQL Server中SQL命令实现这一思路的方式:

DECLARE @aGuid UNIQUEIDENTIFIER 
SET @aGuid = CAST(CAST(NEWID() AS BINARY(10))+ CAST(GETDATE() AS BINARY(6)) AS UNIQUEIDENTIFIER)
(2)实现COMB数据的C#方式:
///<summary>
/// 返回 GUID 用于数据库操作,特定的时间代码可以提高检索效率
/// </summary>
/// <returns>COMB (GUID 与时间混合型) 类型 GUID 数据</returns>
public static Guid NewComb() 

     byte[] guidArray = System.Guid.NewGuid().ToByteArray(); 
     DateTime baseDate = new DateTime(1900,1,1); 
     DateTime now = DateTime.Now; 
     // Get the days and milliseconds which will be used to build the byte string 
     TimeSpan days = new TimeSpan(now.Ticks - baseDate.Ticks); 
     TimeSpan msecs = new TimeSpan(now.Ticks - (new DateTime(now.Year, now.Month, now.Day).Ticks)); 
     // Convert to a byte array 
     // Note that SQL Server is accurate to 1/300th of a millisecond so we divide by 3.333333 
     byte[] daysArray = BitConverter.GetBytes(days.Days); 
     byte[] msecsArray = BitConverter.GetBytes((long)(msecs.TotalMilliseconds/3.333333)); 
     // Reverse the bytes to match SQL Servers ordering 
     Array.Reverse(daysArray); 
     Array.Reverse(msecsArray); 
     // Copy the bytes into the guid 
     Array.Copy(daysArray, daysArray.Length - 2, guidArray, guidArray.Length - 6, 2); 
     Array.Copy(msecsArray, msecsArray.Length - 4, guidArray, guidArray.Length - 4, 4); 
     return new System.Guid(guidArray); 

/// <summary>
/// 从 SQL SERVER 返回的 GUID 中生成时间信息
/// </summary>
/// <param name="guid">包含时间信息的 COMB </param>
/// <returns>时间</returns>
public static DateTime GetDateFromComb(System.Guid guid) 

     DateTime baseDate = new DateTime(1900,1,1); 
     byte[] daysArray = new byte[4]; 
     byte[] msecsArray = new byte[4]; 
     byte[] guidArray = guid.ToByteArray(); 
     // Copy the date parts of the guid to the respective byte arrays. 
     Array.Copy(guidArray, guidArray.Length - 6, daysArray, 2, 2); 
     Array.Copy(guidArray, guidArray.Length - 4, msecsArray, 0, 4); 
     // Reverse the arrays to put them into the appropriate order 
     Array.Reverse(daysArray); 
     Array.Reverse(msecsArray); 
     // Convert the bytes to ints       int days = BitConverter.ToInt32(daysArray, 0);       int msecs = BitConverter.ToInt32(msecsArray, 0);      DateTime date = baseDate.AddDays(days);       date = date.AddMilliseconds(msecs * 3.333333);      return date;  } 出处:https://www.cnblogs.com/password1/p/6001229.html    

SQL Server 数据库性能优化

标签:规律   ber   访问   查询   可能性   title   bms   系统   发布   

人气教程排行