xywuyiba7 发表于 2015-6-28 14:17:10

【高性能web开发】 SQL Server入门(一)用户表

  本文只是一个入门级别的数据库案例。
  希望能通过一些经典案例的分析,大家能共同讨论和分享。
  数据库案例(一)简单的用户表。
  
  业务假设:
  用户表,10个列,无外键, 200万数据 (如果数据量再大一般就考虑分表了)
  以下是假设的操作分布 (仅供参考)
  50% 按照用户Id查询
  40%按照用户名查询
  8%按照Email查询
  1.5%修改用户的数据,例如状态,最后登录时间
  0.5%添加用户数据
  操作特征:一般都只有单条数据的查询
  (如果有分析和统计,一般弄一个同步库出来,在那个单独的库上做较大数据量的分析)
  (某些操作,例如用户排名,最近用户操作等,一般是用其他的方式实现,而不是直接压在用户表上)
  (当然,如果数据量要求不大。。。。其实你做什么都没关系)
  
  软硬件环境:
  CPU: I5
  内存:4GB
  OS:Windows 7 x64 旗舰版
  SqlServer 2008R2 企业版
  (不是服务器环境,有些配置没有达到最优化)
  
  先创建用户表,插入200万+数据(Id为聚集索引,而且连续分布,经常删除数据会导致数据不连续降低性能,所以有些时候选择通过状态位假删数据)



CREATE TABLE .(
    IDENTITY(1,1) NOT NULL,
    (255) NOT NULL,
    (255) NOT NULL,
    (255) NOT NULL,
    NULL,
    NULL,
    (255) NULL,
    NOT NULL,
    NOT NULL,
    NULL,
    (16) NULL,
CONSTRAINT PRIMARY KEY CLUSTERED
(
    ASC
)WITH (PAD_INDEX= OFF, STATISTICS_NORECOMPUTE= OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS= ON, ALLOW_PAGE_LOCKS= ON) ON
) ON
  由于只有3个列支持条件查询,而Id列是默认的聚集索引,所以只要新建两个索引,分别在UserName列和Email列 (一般来说所有可能出现在where语句中的列 都应该建立索引)
  总所周知,过多的索引会降低修改性能,而该案例中查询远比修改来的多
  
  
  第一:按照Id查询 (聚集索引,Id连续)



Declare @Stopwatch datetime
declare @number int
Set @Stopwatch=GetDate()
set @number=0
while (@number
页: [1]
查看完整版本: 【高性能web开发】 SQL Server入门(一)用户表