今天优化一个sql,cost的很小,但是资源消耗巨大,达到5,789.72M,执行11秒,虽然关联了10来个表,但是就有2个大表,分别有30,40万的数据,一个48M,一个184M.其他的都是码表,几十行的数据。后来把码表去掉,就留下2个大表关联查,仍然消耗3,955.37M。就算全表扫描,也不至于这么大。
再检查一下SQL语句,发现有个自定义函数,注释掉,再查询,1秒出结果,肯定是这个自定义函数的问题,进函数看下,原来是传2个表名,和一个字段的值。
如下:
select
b.NAME from d, b where b.code = d.code and d.ID_MAINTAB = '4952788'。2个表都没索引,且d表有30万的数据。这代价是巨大的。
把索引建上,问题解决。
心得:select 后面的自定义函数列不会体现在执行计划里,需要在以后的优化里关注。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25027760/viewspace-731375/
,如需转载,请注明出处,否则将追究法律责任。