关键是看你是怎么sql查询语句是怎么执行的啊?

解决方案 »

  1.   

    select rd.DeptId, c.*, rd.CertAmt from p_certif as c
                            inner join p_instr as rd on c.Detailid=rd.Detailid
                            inner join p_recv as r on r.Recvid=rd.recvId where 1=1  and r.RegTime >='2014/3/21' and r.RegTime<'2014/4/1' order by CorpName, c.Idx
    这个语句一执行直接就卡起。超时了。
      

  2.   

    选中你的sql,然后ctrl+L贴出来执行计划
      

  3.   

    select rd.DeptId, c.*, rd.CertAmt from p_certif as c
                            inner join p_instr as rd on c.Detailid=rd.Detailid
                            inner join p_recv as r on r.Recvid=rd.recvId where 1=1 
     and r.RegTime >='2014/3/21' and r.RegTime<'2014/4/1' 
    order by CorpName, c.Idx执行计划显示pcertif和p_recv 都是聚集索引扫描,
    也就是说表上有聚集索引了,但是查询时没有用到聚集索引,
    那么, p_recv表上的RegTime字段,还有 Detailid表上的p_certif字段,应该加上非聚集索引试试看
      

  4.   

    你的意思是说,把p_recv中的RegTime和p_certif中的DetailId都建立单独的索引吗?
      

  5.   

     select * from sys.dm_db_index_physical_stats(DB_ID('你的数据库名字'),OBJECT_ID('表名'),null,null,'detailed')查询结果相关字段说明avg_fragmentation_in_percent
    逻辑碎片(索引中的无序页)的百分比。
    fragment_count
    索引中的碎片个数(物理上连续的叶页)数量。
    avg_fragment_size_in_pages
    索引中一个碎片的平均页数。alter index  索引名字 on 表明 rebuild  WITH (ONLINE = ON)
      

  6.   

    建议你select 表的时候用哪个字段,就写哪个字段,不要用select *, 这样当你用不到那些二进制的字段的时候,速度会比较快。
    另外建议你改变表结构,只在表中保存文件的目录,文件放到服务器上,不要存在表里面,即使一定要存在表里面,也要分表存,把原来的表拆成2张,把那些大字段放到新建的一张表里面
      

  7.   

    Quote: 引用 13 楼 x_wy46 的回复:

    我建立了索引,也检查了索引碎片,用SQL Server Management Studio自带的“全部重新组织”处理了。
    但是速度依旧无明显变化。我用select rd.DeptId, c.*, rd.CertAmt from p_certif as c
                            inner join p_instr as rd on c.Detailid=rd.Detailid
                            inner join p_recv as r on r.Recvid=rd.recvId
    这个语句查询,耗时1分10秒,数据是20199条,先前没处理前,耗时也是1分10秒左右。
      

  8.   

    http://goobbe.com/questions/1195309/automate-index-rebuild-based-on-fragmentation-results
      

  9.   

    http://goobbe.com/questions/1405413/slow-select-query-in-a-big-table
      

  10.   

    Quote: 引用 19 楼 x_wy46 的回复:

    你的意思是说,尽量增加筛选条件?以达到缩小扫描数据条数的范围,从而达到优化速度的效果?
      

  11.   

    wodw dw dw d wd wddw
      

  12.   

    重建索引会加快查询速度,如:
    DBCC DBREINDEX (TableName1,Index_Name1)