本周在公司的时候,被领导分配一个任务,优化一个报错的sql。
第一次做sql优化,没有考虑太多,找到明显报错的地方,改正后,在测试环境测试了一下,发现速度不慢,于是发到生产上去。但是发到生产之后,发现效率十分低下,一个查询请求使得服务器应用挂起很久,几个查询同时请求时,服务器应用就挂掉了。
于是向大神同事请教,同时马上把生产上效率低下的语句撤掉。大神开始分析,查看可以优化的地方,最后发现问题出在,表的一个列存在列索引的,但是在查询的时候没有用上索引!进一步分析,该列是在Oracle函数中使用的,Oracle函数中使用列的时候会使得索引列失效!于是,把sql语句中使用列索引的函数,换一种方式实现,没有用到函数,然后在生产验证,查询速度神奇般的提升上来了。
教训:测试环境中没有问题的sql不代表在生产环境中没有问题,还要多考虑一番~