簡體   English   中英

大表上的SQL查詢運行緩慢

[英]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]);

我不確定,請嘗試以下操作:

  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')) 

首先嘗試不使用select *指定此查詢中需要的列

您可以創建索引

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

這樣,您將擁有索引搜索功能。

也可以嘗試重建主鍵並更新統計信息。 如果表索引上有很多插入/更新操作,我可能已經過時了。

除此之外,您還可以對表進行分區,從而可以顯着提高性能。 根據您擁有的數據量,例如 按日期划分可能會真正提高性能。

最后,檢查當時數據庫上是否沒有其他繁重的工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM