解决方案 »

  1.   

    select * from tableA where year*100+month between 201205 and 201402
      

  2.   

    SELECT  YEAR([DATE]) AS yyyy
           ,MONTH([DATE]) AS mm
           ,COUNT(1) AS con
    FROM    tableA
    WHERE   [DATE] >= '2012-5-1'
            AND [DATE] < '2014-3-1'
    GROUP BY YEAR([DATE])
           ,MONTH([DATE])在DATE建上索引
      

  3.   

    数据量大还是加个字段,就用 year*100+month 做值,有字段就可以建索引,有了索引才能正真提高性能。
      

  4.   

    在WHERE 在列上别加上函数,这样会造成表扫描
      

  5.   

    最好还是从存储格式上做文章,把数据以date数据类型存储,减少拼接的开销,可以用between and 来查找一个月的数据
      

  6.   

    tableA
    year   month    count
    2011 1              230
    2012   5            1100
    2013  8             3000
    2013  10           3000
    2014  2             1000
    2014  9             6000表是这样的结构麻烦啊,需要用一个计算列,在计算列上索引,直接用条件
      

  7.   


    USE tempdb
    go
    CREATE TABLE tableA([year] INT ,  [month] INT,    [count] INT)go
    --处理方法:
    ALTER TABLE tableA ADD YYMM AS RTRIM([year])+RIGHT(100+[month],2) PERSISTED
    go
    CREATE INDEX IX_tableA_YYMM ON tableA(YYMM);
    go
    SELECT  *
    FROM    tableA
    WHERE  [YYMM] BETWEEN '2012-05' AND '2014-02'
      

  8.   

    如果tableA是通过日期计算出来的结果时用#2楼提供方法,如果tableA是实体表,用计算列优化处理#8楼