[英]Slow running SQL query on a large table
我在sql服務器上運行以下查詢。
select * from table1 where added_on in ('2018-09-26','2018-10-02') and uid=309
我的表包含超過3000萬條記錄。 但是上面的查詢將導致少於200條記錄,因為它需要30-40秒。
我在表上同時有群集索引和非群集索引。
主鍵的聚集索引,add_on(日期字段)的非聚集索引
還有什么我可以用來在桌子上設置的,以加快生成時間
您需要一個索引,其中包含要搜索的兩個字段。 嘗試這個:
CREATE INDEX IX_Composite ON [table1] ([uid], [added_on]);
我不確定,請嘗試以下操作:
創建索引
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'))
首先嘗試不使用select *
指定此查詢中需要的列
您可以創建索引
CREATE INDEX index_name ON table1 (added_on, uid) include (...what you select...);
這樣,您將擁有索引搜索功能。
也可以嘗試重建主鍵並更新統計信息。 如果表索引上有很多插入/更新操作,我可能已經過時了。
除此之外,您還可以對表進行分區,從而可以顯着提高性能。 根據您擁有的數據量,例如 按日期划分可能會真正提高性能。
最后,檢查當時數據庫上是否沒有其他繁重的工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.