这个是最近感觉最有成就的一个发现了。
我们的系统有一个存储过程执行一个很核心的查询功能,但是在某些情况下非常的慢,而且最近QA一直在做性能测试,每天发送大量的数据,导致系统的性能越来越慢,我原来也曾经优化过这个存储过程,建了很多索引,解决了那个时候管理员用户的问题,但是现在很多普通用户的问题更加的严重,经过调试发现第一步的查询非常的慢,打印出结果来发现那个查询会产生9千万条纪录,而且会使用多达6G的硬盘空间来存储临时数据,后来加了个distinct解决了空间问题,空间使用不到6M,但是速度还是很慢,使用Tuning Advisor优化也没有什么帮助,后来我想了下为什么会产生那么多相同的数据呢?仔细看了下SQL,发现它用6个表进行inner join,但是只从其中的四个表各取一个字段,我就把另外的两个表从inner join移到where条件了,查询时间从6分钟(问题最大的一个用户)减少到6秒,呵呵