由于历史的原因,公司的数据库表都没有一个流水号作主键.
但是都有一个或多个字段作主键.数据量很大.现在要分页显示.
我想出了一个类似"边界ID"的分页方法.但是由于没有流水号,我的这个"边界ID"只有通过多个主键字段的字符串拼接来完成.而这就无法利用索引,导致分页速度很慢.如果碰巧遇到只有一个主键的表,那么速度还是很快.因为不需要进行主键的拼接,有效利用了主索引.
那么我问下,在不建流水号ID的情况下,多主键表分页速度慢的问题是否无解,在sql2000下.

解决方案 »

  1.   

    declare @first binary(6)
    select @first = first from sysindexes where id = object_id('fms_transport') and indid in(0,1)
    declare @PageNum int
    select @PageNum = convert(int, substring(@first,4,1) + substring(@first,3,1) +
    substring(@first,2,1) + substring(@first,1,1) )
    declare @FileNum int
    select @FileNum = convert(int, substring(@first,6,1) + substring(@first,5,1))
    select @FileNum, @PageNum--执行DBCC Page
    declare @sql varchar(1000)
    select @sql = 'dbcc page (''' + db_name() + ''', ' + convert(varchar(10),@FileNum) + ', ' + 
    convert(varchar(10),@PageNum) + ', 1)'
    select @sql
    dbcc traceon(3604)
    exec (@sql)
    dbcc page ('eProcessDBTest', 1, 23496, 1)给你研究一下这个
      

  2.   

    http://long_0662.download.csdn.net
      

  3.   

    主键的目的,是为了创建参照完整性.由主键创建了主索引,可以加快速度,如果主索引是聚集索引,速度会更快.
    从这样的基本面去考虑:你的表中的主键是干什么用的?有没有创建为聚集索引?它对你的分页有没有用?
    而后,再去考虑采用什么样的方式分页,是否要另外创建自增列之类的.
    其实,创建一个自增列很简单,只要alter一下表就行了,创建了自增列后,创建一个索引,用它来查找就可能方便一些.