我正在sql服务器上运行以下查询。
select * from table1 where added_on in ('2018-09-26','2018-10-02') and uid=309
我的表包含超过3000万条记录。但是上面的查询将导致少于200条记录,因为它需要30-40秒。
我在表上同时具有聚集索引和非聚集索引。
主键的聚集索引,add_on(日期字段)的非聚集索引
还有什么我可以用来设置桌子上的东西以加快结果时间
答案 0 :(得分:2)
您想要一个索引,其中包含要搜索的两个字段。试试这个:
CREATE INDEX IX_Composite ON [table1] ([uid], [added_on]);
答案 1 :(得分:1)
不确定,但是请尝试以下操作:
创建索引
CREATE INDEX index_name ON table1 (added_on, uid);
这部分代码
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...);
这样,您将拥有索引搜索功能。
也可以尝试重建主键并更新统计信息。如果表索引上有很多插入/更新操作,我可能已经过时了。
除了可以对表进行分区之外,还可以显着提高性能。根据您拥有的数据量,例如按日期划分,这在我看来可能会真正提高性能。
最后,检查当时数据库上是否没有其他繁重的工作