CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

您现在的位置: IT专家网 > 专家库

可以绕过锁的SQL Server索引

作者: Jackie,  出处:IT专家网, 责任编辑: 王晓晨, 
2008-07-23 07:01
  使用SQL Server实际中存在一些不能使用覆盖索引的情况,覆盖索引只能用来解决锁的问题,可以尝试绕过锁的SQL Server索引。

 【IT专家网独家】

      问题提出:

  使用SQL Server会面临一个问题:由于其它进程在对象上持有锁而造成阻塞,当前进程必须一直等待,直到锁被解除才能进行处理。这就是SQL Server确保数据完整性的一般锁机制,由于依赖事务的运行情况,因此会带来一些另外的问题。我们可不可以通过使用不同的索引或者覆盖当前查询来达到绕过阻塞的目的呢?

    专家解答:

  为了更好的阐述观点,我将使用一个表和来自2个不同会话的查询进行相应的说明。

  表结构如下:

  显示名-应用程序使用这个字段显示客户相关的信息。

  当前配额-字段类型为数字,表示一个客户的当前配额(非相关性属性)。在该方案中,这个字段适用于特别的用户,使用一个特别的进程进行监视。

  下个月的配额-字段类型为数字,表示下个月的计划配额。该字段将一直处于某个长期运行的事务中,用来计算所有客户的配额。

  支持级别-该字段是一个1到3之间的整数,表示客户的级别(1=高,3=低),我们有多个应用,进程和事务(商业事务),它们会根据客户优先级的不同来处理不同的客户。

  创建客户表 

IF OBJECT_ID ('customers') IS NOT NULL DROP TABLE customers
  GO
  CREATE TABLE customers
  (
  id INT NOT NULL,
  display_name VARCHAR(10) NOT NULL,
  current_quota bigint NOT NULL,
  next_month_quota bigint NOT NULL,
  support_level smallint NOT NULL,
  some_other_fields_size_1k CHAR(1000) NULL
  )
  GO
  ALTER TABLE customers ADD CONSTRAINT customers_pk PRIMARY KEY (id)
  GO

  正如上图所示,我添加了一个名为“some_other_fields_size_1k”的额外列。该列将模拟1K的客户数据;将它添加到测试程序中是为了让优化器响应更多的有效请求。

  我们可以通过如下步骤为表添加一些数据:

  插入1000条记录。

  每150个客户中有一个客户级别为1,其余客户级别为3。

  为当前配额设置一些值,下月配额设为0。

共6页。 1 2 3 4 5 6 :

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅


    
天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错
All Rights Reserved, Copyright 2004-2008, Ctocio.com.cn
渝ICP证B2-20030003号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i