博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
checksum建立的索引
阅读量:5886 次
发布时间:2019-06-19

本文共 952 字,大约阅读时间需要 3 分钟。

朋友的一个checksum计算列建立的索引:

在数据库设计中需要一列标注网页的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

    本文转自 Fanr_Zh 博客园博客,原文链接:http://www.cnblogs.com/Amaranthus/archive/2012/12/25/2831848.html,如需转载请自行联系原作者

你可能感兴趣的文章
mysql的数学函数
查看>>
golang 使用 gorp 的问题
查看>>
Java44: web基础3
查看>>
最近百度云盘不提供搜索,闲来无事,玩玩python爬虫,爬一下百度云盘的资源...
查看>>
DTO之豁然开朗
查看>>
Hyper-V 3.0 - 更新集成服务
查看>>
隐藏nginx版本号
查看>>
利用shell的expect实现自动登录服务器
查看>>
fio的使用
查看>>
dyninst codecoverage
查看>>
Serv-U FTP Server 错误代码详解
查看>>
break和continue的理解
查看>>
xfs 分区格式化
查看>>
洁净触手可得—LG WD-VH455D1洗衣机使用体验记
查看>>
[C#]回车键实现输入光标的切换及系统快捷键的屏蔽
查看>>
高效职业人的8大习惯
查看>>
机器学习数据集哪里找:最佳数据集来源盘点
查看>>
阿里敏捷教练:多团队开发一个产品的组织设计和思考
查看>>
java线程系列---synchronized详解
查看>>
EAServer 普通jsp网页中调用组件
查看>>