大表上的SQL查询运行缓慢

时间:2018-10-10 07:13:09

标签: sql sql-server optimization

我正在sql服务器上运行以下查询。

select * from table1 where added_on in ('2018-09-26','2018-10-02') and uid=309

我的表包含超过3000万条记录。但是上面的查询将导致少于200条记录,因为它需要30-40秒。

我在表上同时具有聚集索引和非聚集索引。

主键的聚集索引,add_on(日期字段)的非聚集索引

还有什么我可以用来设置桌子上的东西以加快结果时间

3 个答案:

答案 0 :(得分:2)

您想要一个索引,其中包含要搜索的两个字段。试试这个:

CREATE INDEX IX_Composite ON [table1] ([uid], [added_on]);

答案 1 :(得分:1)

不确定,但是请尝试以下操作:

  1. 创建索引

    CREATE INDEX index_name ON table1 (added_on, uid);
    
  2. 这部分代码

    where added_on in ('2018-09-26','2018-10-02')
    

    您以类似字符串类型的形式在日期中写入日期,也许数据库尝试将其转换为浪费时间的日期类型。 试试这个:

    where added_on in (to_date('2018-09-26','yyyy-mm-dd'),to_date('2018-10-02','yyyy-mm-dd'))
    

答案 2 :(得分:0)

首先尝试不使用select *指定此查询所需的列

您可以创建和编制索引

    CREATE INDEX index_name ON table1 (added_on, uid) include (...what you select...);

这样,您将拥有索引搜索功能。

也可以尝试重建主键并更新统计信息。如果表索引上有很多插入/更新操作,我可能已经过时了。

除了可以对表进行分区之外,还可以显着提高性能。根据您拥有的数据量,例如按日期划分,这在我看来可能会真正提高性能。

最后,检查当时数据库上是否没有其他繁重的工作