1. 程式人生 > >記一次數據查詢優化

記一次數據查詢優化

etime cnblogs 排除 ron sel sele dmi 一個表 依然

某天搬磚搬得熱火朝天,突然一個電話打來,業務部門反映,某功能特別卡,簡直不能忍。有多慢?大概90s。是突然很慢?還是之前就很慢?之前就有點慢,但是沒有這麽慢。好了,不扯犢子了,直接查看源碼:

   public DataSet  GetStockByUserAndTime(string warehouseID, string userID, int minutes)
        {
            SqlItem sqlItem = new SqlItem();
            var searchTime = DateTime.Now.AddMinutes(0 - minutes);        
            sqlItem.SqlStr 
= @" select t.manifest_no from STOCK_IN_OUT t where t.update_time >:searchTime and t.update_user=:userID and t.warehouse_id = :warehouseID and t.action_type = 0
"; sqlItem.AppendParameter("searchTime", searchTime); sqlItem.AppendParameter("userID", userID); sqlItem.AppendParameter("warehouseID", warehouseID); return GetDataSet(sqlItem); }
  1. 可以看出總共才一個表,用pl/sq查看一下表,發現改表數據量很大,每天都要新增10幾萬條數據,並且update_time字段沒有創建索引,所以初步判斷是未創建索引導致,急忙聯系一下數據庫小組,給我某庫的STOCK_IN_OUT
    表加個索引唄?,加完了索引,居然還是慢,到底什麽導致的?
  2. 會不會是網絡傳輸慢,但是其它類似的方法依然很快,所以排除。
  3. 是不是日期格式原因導致的?原傳入“searchTime”參數直接是日期格式,而不是string類型,故可以將日期格式轉換成string類型傳入,在sql語句裏面再轉換成日期格式,改成如下
 public DataSet  GetStockByUserAndTime(string warehouseID, string userID, int minutes)
        {
            SqlItem sqlItem = new SqlItem();
            var searchTime = DateTime.Now.AddMinutes(0 - minutes).ToString("yyyy-MM-dd HH:mm:ss");        
            sqlItem.SqlStr = @"
                select t.manifest_no from STOCK_IN_OUT t 
                where 
                            t.update_time >to_date(:searchTime,‘yyyy-mm-dd hh24:mi:ss‘)
                            and t.update_user=:userID
                            and t.warehouse_id = :warehouseID
                            and t.action_type = 0   ";
            sqlItem.AppendParameter("searchTime", searchTime);
            sqlItem.AppendParameter("userID", userID);
            sqlItem.AppendParameter("warehouseID", warehouseID);
            return GetDataSet(sqlItem);
        }

調試了一下,只用了223ms,果然是日期格式的原因。

之前為什麽沒有出現這個問題,和數據庫小組溝通,數據庫小組:在日期轉換的時候,盡量傳入string類型,在sql語句裏面轉換,可能是oralce升級,驅動原因導致的。我:恩,這個鍋應該讓驅動來背。總之,日期格式要留意啊。

記一次數據查詢優化