教科书上云:
建立索引的理由:
1.一般情况下,索引会加快表的连接和执行排序或分组操作的查询。
2.如果在创建索引时定义了唯一性,索引会增强行的唯一性。
3.索引以升序或降序的查询顺序创建和维护。
4.在具有较高水平的选择性(数据的主体--列或列的组合是唯一的)时,索引在类上被创建。
不建索引的理由:
索引不是必须的,因为它会消耗硬盘空间并会导制开销和维护开销。
1.在被索引的列上修改数据时,SQLServer将会更新相关的索引。
2.维护索引需要时间和资源,因此,在不经常使用索引时不要创建索引。
3.如果列上的索引包括有大量重复的数据,那么该索引就没有什么优势。

解决方案 »

  1.   

    to:BrentIvan(Ivan) 
    但是那会带来不必要的开销啊?
    另外,我操作表时没有涉及“idx”字段,那么建立在该主键上的索引对我的操作有没有影响呢?
      

  2.   

    不会有影响,如果数据量比较大的话,会大幅提高性能。不过看来你的DATABASE的记录比较少,所以效果不大!
      

  3.   

    to leimin(leimin)
    但是那样做有个缺点,就是如果表的插入和删除操作频繁,那最终将导致idx的值溢出,有没有其他更好创建主键或优化数据库的方法呢?
      

  4.   

    to tomhuang(春城) 
    会给分的,别急啊,我很爽快的
    表中的数据在某一时刻不超过一万条,但每分钟可能插入或删除几千条,那样的话idx可能不久会溢出,有没有什么好一点的优化方法呢?(表中需要做查找操作)
      

  5.   

    恐怕很难了,你用的是MS SQL SERVER吗?我们也遇到了类似问题,没有在MS SQL SERVER上解决,后来迁移到ORACLE8上面才彻底解决了,而且是小型机,是移动的记费系统,建议你迁移到ORACLE上来做。
      

  6.   

    tomhuang(春城)
    但是那样做有个缺点,就是如果表的插入和删除操作频繁,那最终将导致idx的值溢出,有没有其他更好创建主键或优化数据库的方法呢?
    用idx BIGINT identity(1,1) primary key 就不会溢出了。
    good luck
      

  7.   

    to tomhuang(春城)
    在ORACLE上怎么做?上面的语句不改动就行吗?它不会溢出吗?
      

  8.   

    在MS SQL SERVER上你最好设置一下日志的自动清除点,就可以避免日志的益出,但建议你不要用identity,编一个存储过程来获得唯一的IDX,比如IDX与时间日期关联,这样就可以避免identity的益出问题了。
      

  9.   

    to tomhuang(春城)
    谢谢!
    我还想了解一下ORACLE上的操作,是不是它就不存在溢出,还是它有更好的方法?
    等你来了就结了此贴。
      

  10.   

    Oracle实际上也同样存在溢出的问题,这是设计的思路问题,如果你采用identity的方式的话,这个问题都存在,所以你应该编一个存储过程来获得唯一的IDX,并将IDX与时间日期关联,这样就可以避免identity的益出问题了。 例如:200204170001、200204170002,用日期(或再加入时间:200204171009130001)与identity合在一起来做,长度加长了些,但相信不会影响什么了。希望我的看法对你有帮助。