SQL SERVER 2005的CHECKSUM计算字段优化索引
2011-01-07 17:17
253 查看
记录一下备忘,在实际项目中用到的。
在数据库设计中需要一列标注网页的URL地址,LINK NVARCHAR(1000)。在INSERT的时候需要判断之前有无同样的URL地址记录被插入。
也就是用select top 1 @ID=ID from Table where Link=@Link,然后判断@ID值是否大于0。
如果数据量过大,需要给LINK加为索引,但是这时会发现SQL SERVER的索引对那么大的NVARCHR是无法建立的,限制在200字符以内。
我在最早的时候解决这个问题是采用了对LINK进行MD5化,MD5的值只有几十个字符长,然后对MD5结果进行索引。但这样做性能其实一般,而且大字段的数据库索引同样会占用不少存储空间。
其实在SQL SERVER中可以设置计算字段,就是说该字段是可以是其他字段的计算结果。这样的话就用CHECKSUM来优化上述的索引问题。
做法范例:alter table tablename add csLink as CHECKSUM(Link)。
这样就建立一个csLink列,生成的CHECKSUM值是一个大的整数。对该列进行索引,相当于对BITINT型进行索引,索引存储空间也非常节约。这样在判别有无重复LINK的时候就使用:
select top 1 @ID=ID from Table where csLink=CHECKSUM(@Link) And Link=@Link
数据库会优先判断csLink索引字段,而实际测试100万条记录的CHECKSUM,无一重复,所以第一次匹配的返回条数是极少的,基本可以做到一批匹配,而考虑肯能会有重复记录,因此再加上And Link=@Link,这样是在小的数据集中再次做无索引匹配,这样性能损耗几乎没有感觉。
计算字段给我感觉就好像视图,计算字段的灵活度除了简化查找SELECT语句之外,对索引优化的作用是非常大的。CHECKSUM的用法只是发现之一,在今后一定会发现更多的有用的TIPS。
在数据库设计中需要一列标注网页的URL地址,LINK NVARCHAR(1000)。在INSERT的时候需要判断之前有无同样的URL地址记录被插入。
也就是用select top 1 @ID=ID from Table where Link=@Link,然后判断@ID值是否大于0。
如果数据量过大,需要给LINK加为索引,但是这时会发现SQL SERVER的索引对那么大的NVARCHR是无法建立的,限制在200字符以内。
我在最早的时候解决这个问题是采用了对LINK进行MD5化,MD5的值只有几十个字符长,然后对MD5结果进行索引。但这样做性能其实一般,而且大字段的数据库索引同样会占用不少存储空间。
其实在SQL SERVER中可以设置计算字段,就是说该字段是可以是其他字段的计算结果。这样的话就用CHECKSUM来优化上述的索引问题。
做法范例:alter table tablename add csLink as CHECKSUM(Link)。
这样就建立一个csLink列,生成的CHECKSUM值是一个大的整数。对该列进行索引,相当于对BITINT型进行索引,索引存储空间也非常节约。这样在判别有无重复LINK的时候就使用:
select top 1 @ID=ID from Table where csLink=CHECKSUM(@Link) And Link=@Link
数据库会优先判断csLink索引字段,而实际测试100万条记录的CHECKSUM,无一重复,所以第一次匹配的返回条数是极少的,基本可以做到一批匹配,而考虑肯能会有重复记录,因此再加上And Link=@Link,这样是在小的数据集中再次做无索引匹配,这样性能损耗几乎没有感觉。
计算字段给我感觉就好像视图,计算字段的灵活度除了简化查找SELECT语句之外,对索引优化的作用是非常大的。CHECKSUM的用法只是发现之一,在今后一定会发现更多的有用的TIPS。
相关文章推荐
- SQL Server 2005 索引优化
- SQL Server 2005 性能优化实战系列(文章索引)
- SQL Server中,计算count(*),优化器会使用聚集索引还是非聚集索引?
- SQL Server 2005 索引优化
- SQL Server 2005 性能优化实战系列(文章索引)
- SQL Server 2005 中的计算字段
- SQL Server 2005 索引优化
- SQL Server 2005 中的计算字段
- SQL Server 2005 索引优化
- SQL Server 2005 索引优化
- sql server 查询所有表的字段的详细信息的存储过程(在 SQL Server 2005 中查询表结构及索引 )
- (转)SQL Server 2005 中的计算字段
- SQL Server 重建索引|索引重组|索引的碎片检查 (MSSQL个人笔记之数据库优化之路 六<SQL2005以上>)
- (转)SQL Server 2005 性能优化实战系列(文章索引)
- Sql Server查询性能优化之创建合理的索引
- Sql Server查询性能优化之创建合理的索引(下篇)
- sql server 海量数据速度提升:SQL优化-索引(8)
- sql server 索引及语句优化
- sql server 海量数据速度提升:SQL优化-索引(11) 【转】
- SQL Server 查询优化 索引的结构与分类