CREATE TABLE PATDDPF ( --出勤表
NOEM21 varchar (8) COLLATE Chinese_PRC_CI_AS NOT NULL , --职员编号
YMAT21 varchar (6) COLLATE Chinese_PRC_CI_AS NOT NULL , --出勤年月
DDAT21 varchar (2) COLLATE Chinese_PRC_CI_AS NOT NULL  --出勤日
primary key (noem21,ymat21,ddat21),
IDCO21 varchar (2) COLLATE Chinese_PRC_CI_AS NULL ,
CDDP21 varchar (6) COLLATE Chinese_PRC_CI_AS NULL ,
CDJW21 varchar (2) COLLATE Chinese_PRC_CI_AS NULL ,
IDWK21 varchar (1) COLLATE Chinese_PRC_CI_AS NULL ,
HRJS21 numeric(3, 1) NULL ,
HRBK21 numeric(3, 1) NULL , --出勤时间
HRSK21 numeric(3, 1) NULL ,
HRSG21 numeric(3, 1) NULL ,



GO--这是一张出勤表,数据有七十多万条,每次查询时速度都非常慢,如何优化查询?

解决方案 »

  1.   


    create  clustered index idx_职员编号 on PATDDPF(职员编号)  create nonclustered index idx_出勤年月 on PATDDPF(出勤年月)
      

  2.   

    CREATE PROC SP_PAT @YMAT  AS VARCHAR(6)
                      ,@DDAT  AS VARCHAR(2)
    AS
    SELECT  NOEM21                
            ,YMAT21                
            ,DDAT21                
         FROM PATDDPF            
        WHERE YMAT21 = @YMAT
          AND DDAT21 = @DDAT
    执行时非常慢!!
      

  3.   

    DDAT21
    --
    YMAT21建组合索引
    create index 索引名 on 表名(YMAT21,YMAT21)
      

  4.   

    1.合理使用索引   
    2.避免或简化排序   
    3.消除对大型表行数据的顺序存取 
    4.避免相关子查询 
    5.避免困难的正规表达式 
    6.使用临时表加速查询
    7.用排序来取代非顺序存取数据库的查询优化技术     
    http://blog.csdn.net/suyiming/archive/2007/11/22/1897606.aspx