none
怎么为 数据库 创建 索引 RRS feed

  • 问题

  • 很多数据写入到DATABASE,比如有10个ID: 10001, 10002, 。。。 10010,

    这10个ID的 每次有5个数据写入到SQL,这5个数据是按照时间顺序的。

    我现在想要查询任一个ID,并且时间满足一定条件范围。比如,我要SQL语句查询 : 10003的数据,时间在2011-03-10 -- 2011-03-11的数据。

    现在我的查询速度很慢,我想创建索引以加快速度,请问该怎么样创建??

    谢谢大家

    2011年3月13日 13:04

答案

  • 在两个查询条件上创建所以, 例如

    create index index1 on t(id,createddate)

    id和createddate的先后顺序由唯一性来决定,如果id能够区分的数据更多,则id在前,反之则是createddate在前

    如果返回的数据行很多,则聚集索引效果会好一些,但可能会影响到其他的查询。这要你去评估一下。

    但并不是创建完了就没事了,还需要根据数据量的变化和具体的查询语句来进行调整..


    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    2011年3月13日 15:30
    版主

全部回复

  • 在两个查询条件上创建所以, 例如

    create index index1 on t(id,createddate)

    id和createddate的先后顺序由唯一性来决定,如果id能够区分的数据更多,则id在前,反之则是createddate在前

    如果返回的数据行很多,则聚集索引效果会好一些,但可能会影响到其他的查询。这要你去评估一下。

    但并不是创建完了就没事了,还需要根据数据量的变化和具体的查询语句来进行调整..


    有dba的职位吗(北京的),请联系我 stswordman#hotmail.com
    2011年3月13日 15:30
    版主
  • And you need rebuild index and update stats time to time. Books online has details, check 'Clustered Index Design Guidelines', 'Nonclustered Index Design Guidelines', 'CREATE INDEX (Transact-SQL)' and 'ALTER INDEX (Transact-SQL)' there. 
    2011年3月13日 15:58
  • 你好,

    为了充分利用你在CreatedDate 列上创建的索引,我们对该列执行查询语句时候必须要充分利用该索引,请参阅下面的语句:

    DECLARE @Date DATETIME
    SET @Date='2010-10-07'
    
    SELECT * FROM YourTable WHERE CreatedDate>=DATEADD(dd,(DATEDIFF(dd,0,@Date)),0)
    AND CreatedDate<DATEADD(dd,(DATEDIFF(dd,0,@Date)),1)
    
    

    更多信息,请参阅:
    http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/16/bad-habits-to-kick-mishandling-date-range-queries.aspx

    谢谢,
    邱爱华


    Ai-hua Qiu[MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    2011年3月14日 7:05