该表只有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 动作.
数据量还是挺大的,那么可以按a列建立非聚集索引,然后再按b列也建立非聚集索引 要加主键的话可以考虑加一列自增ID,那两列更新频繁的话就别加主键了,加个复合索引试试
|