是用什么开发的?.net 有缓存机制!开始启动的时候,是比较慢一些....
解决方案 »
- (50分)求一个存储过程的问题!
- ADO.NET操作数据库,在线等!回答正确即结贴
- 急啊!高手告诉我这个怎么写,正确立即给分!
- 有没有SQLSERVER、HTML+JAVASRCIPT、ASP的一些考试题目,急啊!!!
- 简单的ID问题,100分招标!
- 通过@@identity比实际插入的值大
- 这个sql如何搞掂!90分等你拿!在线等待!!!!
- 请问sql语句中是否有一次删除多个指定id记录的便利语句?
- 如何设置SQL Server2000的数据源密码?
- 各种格式的文件在数据库中是怎样存放的?
- 如果ID是SST002这一类的该如何叫他自动增加呢?
- 一个有点难的查询排序问题!求高手尽快决解!谢谢!
关于“今日访问量”库表设计的探讨 近日发现一个网站系统的主页上有个奇怪的现象,用户进入主页时候会等待30多秒,然后再重新进入又开始快了,这种问题是偶尔发生的,而不是有规律的;
经过查看程序代码,发现主页里有一个update命令,表结构如下:
日期 今日总次数
20010101 2次
20010102 3次
…………..从如上的表结构和程序里的update语句可以分析出来如下结论:
例如今天是20010102
如果100个用户同时访问主页,就都要将表里的20010102这条记录修改,
Update语句可以理解为以下几个步骤:
1定位20010102这条记录,
2为20010102加锁
3将20010102老记录放入deleteed表里,同时删除原表这条记录;
4,将inserted表里的记录插入进来;
5,释放锁;所以说,数据库接收这100个update命令是顺序执行的,
假设这个update需要0.2秒,那么第100个人就需要等待0.2*99大概19秒,
这对于一个主页来说是不能让人接受的;所以我们必须采用如下的表结构:
一,今日访问记录表
Id 日期
1 20010102
1 20010102
1 20010102
1 20010102
…………二,总访问记录表
日期 次数
20010101 2次
20010102 3次在编写程序的时候是不会用到update语句的,用户只往” 今日访问记录表”里插入记录,这不会造成等待的;
插入的时候做个判断,看” 今日访问记录表”里时间不等于今天的记录是否大于0,如果是,则执行一条insert into总访问记录表(日期,次数) select 日期,count(1) from今日访问记录表 where 日期=today 就行了;在其它应用中Update是避免不了的,我们只能告诉用户,为了避免读脏数据,您只能等其他用户处理完释放表后才能操作;
但在主页里,我们可以避开update操作带来的锁表问题;