zoukankan      html  css  js  c++  java
  • 记一次数据查询优化

    某天搬砖搬得热火朝天,突然一个电话打来,业务部门反映,某功能特别卡,简直不能忍。有多慢?大概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升级,驱动原因导致的。我:恩,这个锅应该让驱动来背。总之,日期格式要留意啊。

  • 相关阅读:
    [Luogu] P3258 [JLOI2014]松鼠的新家
    [Luogu] P3701 「伪模板」主席树
    [USACO] 打井 Watering Hole
    [Luogu] P3225 [HNOI2012]矿场搭建
    [USACO06JAN] 冗余路径 Redundant Paths
    [Luogu] P1407 [国家集训队]稳定婚姻
    [USACO06JAN] 牛的舞会 The Cow Prom
    [Luogu] P4254 [JSOI2008]Blue Mary开公司
    [Luogu] P1993 小K的农场
    [Luogu] P2279 [HNOI2003]消防局的设立
  • 原文地址:https://www.cnblogs.com/mengxiangzhi/p/7525490.html
Copyright © 2011-2022 走看看