日期:2014-05-16  浏览次数:20713 次

Sql Server索引建立咨询
该表只有2个字段,一个是存15位的数字,一个是存11位的数字。
以前都是varchar类型的,效率比较低。现在类型改成bigint了。
想建立索引,不清楚是应该聚集索引还是非聚集索引。是否建立主键

               A列                        B列
460002342342311,11111111111
460002342342312,22222222222
460002342342313,33333333333
460002342342314,44444444444

数据格式如上,两列均不会重复。
主要执行insert跟delete

insert效率可以
delete效率一般,SQL如下:
DELETE FROM T_IMSIPHONERELATIONS WHERE IMSI in (460002342342311,460002342342312) 
OR TELEPHONE in (11111111111,22222222222)

以上两列该如何建立索引以及主键 效率最高呢?
------解决方案--------------------
DELETE 的动作是先 select 找到数据,在删除数据;所以创建索引可以帮助加快delete. 根据你的随机删除(random select)和15位bigint,我会优先考虑非聚集索引. 可以尝试2个non-cluster 或者一个combined non-cluster

关于是否建立primary key 和 cluster index, 恐怕你会建立在IMSI 这列吧. primary key只是约束,不影响性能. cluster index是物理排序的,在一种情况下会影响性能,如果你随机  insert 而不是顺序insert,那么每次insert 后, cluster index都要排一次序, 会慢很多, 如果有non-cluster, cluster index 同时存在,就更慢了,这就是为什么insert 要停掉index. 同时cluster index帮助non-cluster 加快lookup, 而不用走heap SID lookup, 一定程度加快点delete 动作.




------解决方案--------------------
引用:
Quote: 引用:

可以按照A建立聚集索引,然后按照B列建立非聚集索引


忘记说了,数据量在3千万条左右。A列建聚集索引合适吗?会不会比较大~

我只是简单的了解了一下索引。问的不专业,不好意思,


哦 数据量还是挺大的,那么可以按a列建立非聚集索引,然后再按b列也建立非聚集索引
------解决方案--------------------
要加主键的话可以考虑加一列自增ID,那两列更新频繁的话就别加主键了,加个复合索引试试