DUMP TRANSACTION 你的数据库名 WITH NO_LOG
BACKUP LOG 你的数据库名 WITH NO_LOG
DBCC SHRINKDATABASE(你的数据库名)
EXEC sp_dboption '你的数据库名', 'autoshrink', 'TRUE'

解决方案 »

  1.   

    sp_spaceused是计算的值,出现负数是正常的.如果日志不再需要,先清理日志(如果日志需要,则进行日志备份)
    backup log 库名 with no_log然后到企业管理器中收缩一下数据文件和日志文件(sql语句可以用DBCC SHRINKFILE)然后再用 sp_spaceused 查询
      

  2.   

    index size怎么这么大,为什么?
      

  3.   

    use [dbname]
    go
    dbcc updateusage(0)
    go
    backup log [dbname] with no_log
    go
    dbcc shrinkfile(2,100)
    go
    exec sp_spaceused
      

  4.   

    邹老大,我完全按照你的指示做了,但是数据库还是2.5G多,其中data项只有700M多,index 和 reserved的还是比较大
      

  5.   

    我是在select 的地方 加了 with(index(index_name)),index_name 中的字段完全按照where中的条件顺序来的如果不是如此我该如何,因为select 语句中的where 排列不一定一样,难道我见一个包含我的where中所有字段一个索引嘛
      

  6.   

    我好多的select 中where 子句都不一样,当时也没有考虑到这些,直接按照所有的where建了index
      

  7.   

    应该尝试让sql自动选择索引."_name 中的字段完全按照where中的条件顺序来的"为什么一定要求where中的字段顺序? 
    where a=1 and b=1 与 where b=1 and a=1 有区别吗?如果你在a,b字段上建立索引,无论使用上述那个查询方式,sql 都会自动使用a,b字段上建立的索引,并且自动帮你调整条件顺序.
    楼主也把sql看得太弱了吧? 小小一个顺序都要自己来维护,那不累死?
      

  8.   

    邹老大,你的意思是我的select不需要指定索引,那为什么在第一次的select时速度慢,后面的select速度就快了,如何知道我的select利用了索引
      

  9.   

    不指定索引的话,sql第一次执行的时候会根据你的表结构和sql语句决定处理算法,这个处理过程比较耗CPU,也比较慢所以经常使用的查询会建成视图或者存储过程,这样可以把执行计划保存起来,以后调用的时候不存在找算法的问题.查看是否利用了索引,可以把语句放在查询分析器中,按Ctrl+L查看查询计划.