我有一个表只有两列共有10亿条(行)数据,第一列值是0~10亿按顺序排列各不相同,第二列只有几w左右的不同值。
我的需求是:我每次会找出第二列值相同的(等于某值)数据然后把他们第二列的值统一改成某个数。我还有一个需求是查找第一列等于某值的数据(因为第一列各不相同所以这个数据一次查找只有一个)。我应该怎么建索引,建什么索引会比较快呢,还有需要把第一列设为主键么??
ps:我用的是qt的数据库qsqlite,不过没什么关系。。于是来这个版块问一下。

解决方案 »

  1.   

    sqlite的表,记录达10亿?
    如果是mssql,也要分区表来优化了
      

  2.   

    ps:我现在还需要按照主键值找到那行,然后修改第二列的值。。目前是在第二列建了聚集索引,感觉update比较慢啊,update10w行需要2s。。
      

  3.   

    10亿的数据建索引其实没什么效果,可以考虑使用分区表再建索引。那么大的索引维护起来开销也非常大。存储空间也会非常大,加上B-TREE的层次跟着加多,查询效率就会迅速下降
      

  4.   

    2005以后就出现了在创建非聚集索引时使用include命令来包含一些不是很必要创建索引的列但是有些查询又需要用到的。如果不创建,会出现丢失索引,也导致运行速度忒慢。但是过多的索引必然引起update的开销,特别是你要update聚集索引所在的列,那么表中所有非聚集索引都会跟着重建。