当前位置: 代码迷 >> Sql Server >> 数据库索引优化,该如何解决
  详细解决方案

数据库索引优化,该如何解决

热度:26   发布时间:2016-04-24 10:51:00.0
数据库索引优化

sql 2008 

   1.每个表中一个经常用到的字段,为 时间、是否有效,时间维度为月,但是字段类型为时间类型,我们都是用'201401' 来进行匹配,(利用到数据库的自动转型),是否这样会存在效率上面的问题?

   2.在做数据查询、修改、时都会用到,我现在的索引有 一个为id的聚集索引,和根据时间、是否有效的复合索引,感觉有些时候还是比较慢,在表查询的时候where后面有时候还会跟随一些筛选条件,是否这些也要添加到索引中去呢?

   3.如这条语句,差不多执行了2个小时,不筛选是200多w,筛选后为40多w,临时表中有60多w,belong = '20140101' and p.isavailable = 1
为索引标识,如何优化。
update x_src_bendijiazhangduanxinxiang_mx
    set isdudect = '是' 
   from x_src_bendijiazhangduanxinxiang_mx p
  where p.belong = '20140101' and p.isavailable = 1
    and p.kt_time_bak is not null
    and p.number in(
 select parent_number from #ywdm
  where convert(varchar(7),DATEADD(mm, DATEDIFF(mm,0,td_time), 0),120 ) > convert(varchar(7),DATEADD(mm, DATEDIFF(mm,0,dateadd(month,-6,p.kt_time_bak)), 0),120)
    and convert(datetime,td_time,120 ) < convert(datetime,p.kt_time_bak ,120))


请高手指定。
------解决方案--------------------
ctrl+m
然后执行:
BEGIN TRAN
UPDATE  x_src_bendijiazhangduanxinxiang_mx
SET     isdudect = '是'
FROM    x_src_bendijiazhangduanxinxiang_mx p
WHERE   p.belong = '20140101'
        AND p.isavailable = 1
        AND p.kt_time_bak IS NOT NULL
        AND p.number IN (
        SELECT  parent_number
        FROM    #ywdm
        WHERE   CONVERT(VARCHAR(7), DATEADD(mm, DATEDIFF(mm, 0, td_time), 0), 120) > CONVERT(VARCHAR(7), DATEADD(mm,
                                                              DATEDIFF(mm, 0,
                                                              DATEADD(month,
                                                              -6,
                                                              p.kt_time_bak)),
                                                              0), 120)
                AND CONVERT(DATETIME, td_time, 120) < CONVERT(DATETIME, p.kt_time_bak, 120) )
ROLLBACK
  相关解决方案