博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记一次数据查询优化
阅读量:4480 次
发布时间:2019-06-08

本文共 2165 字,大约阅读时间需要 7 分钟。

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

 

转载于:https://www.cnblogs.com/mengxiangzhi/p/7525490.html

你可能感兴趣的文章
mysql 添加[取消]timestamp的自动更新
查看>>
码农的半衰期只有15年?
查看>>
手工释放linux内存
查看>>
2014-5-30 总结
查看>>
【H3 BPM工作流程管理产品小故事】第四篇 子表创建
查看>>
洛谷P1148 拱猪计分
查看>>
MySQL服务器的安装和配置,MySQL Workbench 8.0.12安装,MySQL的基本使用
查看>>
扑克序列
查看>>
java笔记--适配器模式的运用
查看>>
C#与数据结构--图的遍历
查看>>
ispy 编译笔记
查看>>
bzoj1067——SCOI2007降雨量(线段树,细节题)
查看>>
day 1
查看>>
洛谷P1282 多米诺骨牌【线性dp】
查看>>
数据类型的提升(promotion)
查看>>
Thead是不能返回值的,但是作为更高级的Task当然要弥补一下这个功能。
查看>>
Android呼叫转移跳转到拨号盘 “#”号显示不出来
查看>>
Python中的生成器与yield
查看>>
JQuery 的Bind()事件
查看>>
Maven 常用配置
查看>>