zoukankan      html  css  js  c++  java
  • sqlserver中索引优化

    • 背景:

    MRO表中TimeStamp nvarchar(32),但实际上它存储的内容是日期(2015-09-09 11:20:30)。

    现在我要执行这样一个sql语句:

    Select t10.* from Tuning.MRO as T10 inner join Tuning.MRO_LteCell as T11 on T10.OID=T11.MROOID
    Where T10.ObjectID=@ObjectID
       and T10.UEID=@UEID
       and (T10.TimeStamp>@BeginTime and T10.TimeStamp<@EndTime);

    Tuning.MRO有3亿条记录

    Tuning.MRO_LteCell有7亿记录

    这时上边的sql语句执行时间是3分钟多,这时Tuning.MRO.TimeStamp是没有索引的。

    • 请问,这对整个情况,有什么好的优化方法?

    1,)如果添加上Tuning.mro.TimeStamp的索引,是否和把TimeStamp类型改为DateTime类型具有一样的效果。

    • DBA给的回答

      从索引的角度来说,要少而精。

         从你的sql角度来看。如果MRO的objectid能够定位返回的行数更少,而且使用频繁。可以在objectid上建立索引。 同理,也可以在ueid、timestamp上建立索引。

         关键看哪个字段使用更频繁,返回行数更少。

        一般来说如果是时间字段。建议使用datetime。

         1.占用字节更少,8位

         2.更兼容一些。比如如果输入的‘20150909’ 这样。SqlServer可以自动改变成2015-09-09这样的时间格式。

     关于sql优化:http://www.cnblogs.com/wy123/category/834336.html

  • 相关阅读:
    TOJ1017: Tour Guide
    tzcacm去年训练的好题的AC代码及题解
    Educational Codeforces Round 40 (Rated for Div. 2)
    AtCoder Regular Contest 092
    浙南联合训练赛20180318
    [Offer收割]编程练习赛50
    牛客练习赛13
    AtCoder Regular Contest 091
    Codeforces Round #470 (rated, Div. 2, based on VK Cup 2018 Round 1)
    csa Round #73 (Div. 2 only)
  • 原文地址:https://www.cnblogs.com/yy3b2007com/p/4818219.html
Copyright © 2011-2022 走看看