checksum建立的索引

摘要:
由朋友的校验和计算列建立的索引:在数据库设计中,您需要一个列来标记网页的URL地址LINKNVARCHAR。在这种情况下,CHECKSUM用于优化上述索引问题。这样,我们可以使用:selecttop1@ID=IDfromTablewherecsLink=CHECKSUMAndLink=@Link数据库将优先确定csLink索引字段。然而,实际测试的100万条记录的CHECKSUM没有重复项,因此第一场比赛返回的项目数量非常少。基本上,可以实现一批匹配。考虑到可能存在重复的记录,因此AndLink=@Link,这是为了在一个小数据集中再次进行非索引匹配,因此几乎没有性能损失的感觉。

朋友的一个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

免责声明:文章转载自《checksum建立的索引》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL Server页中行物理存储

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

pandas之Series

Series是Pandas中最基本的对象,Series类似一种一维数组,在 Series 中包含的数据类型可以是整数、浮点、字符串、Python对象等。 pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False) series的创建: 列表...

JS笔记之第六天

Date的使用方法 Date是一个通用首部,其中包含了创建的日期和时间。 .getFullYear(); 年 .getMonth();月;从0开始的,获取真实的月份需要加1 .getDate();日 .getHours();小时 .getMinutes();分钟 .getSeconds();秒 .getMilliseconds();毫秒 .getDay();...

Mysql索引介绍及常见索引(主键索引、唯一索引、普通索引、全文索引、组合索引)的区别

Mysql各种索引区别:普通索引:最基本的索引,没有任何限制唯一索引:与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值。主键索引:它 是一种特殊的唯一索引,不允许有空值。全文索引:仅可用于 MyISAM 表,针对较大的数据,生成全文索引很耗时好空间。组合索引:为了更多的提高mysql效率可建立组合索引,遵循”最左前缀“原则。 Mysql索...

mysql 几问

再看一次《高性能mysql》读书问题汇总笔记,不写答案。每过一段时间查看加深印象。 1.mysql如何并发控制数据正确性? 2.解释读锁和写锁:读锁写锁是否都会相互阻塞? 3.锁的粒度有哪些?不同的粒度开销如何? 4.事务ACID是哪些? 5.隔离级别有哪些?mysql默认是哪种隔离级别?隔离性越强不代表越好?mysql如何解决幻读?(间隙锁) 6.死锁原因...

MySQL索引-B+树(看完你就明白了)

索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在 [1,2,3,4] 中找到 4 这个数据,直接对全数据检索也很快,没有必要费力气建索引再去查找。 索引在 MySQL 数据库中分三类: B+ 树索引 Hash 索引 全文索引 我们今天要介...

Python学习day4(列表,元组,range()方法)

列表: 列表是python中的基础数据类型之一,其他语言中也有类似于列表的数据类型,比如js中叫数组,他是以[]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型比如: li = [‘hyg’,123,Ture,(1,2,3,’hum’),[1,2,3,’小明’,],{‘name’:’lyy’}] 列表相比于字符串,不仅可以储存不同的数据类型,而且可...