所有分析都是具体问题具体分析的,情况不适合的同学另找解决方案。
案例1:select s.row_id,s.money from v_school s where s.money>1000 (其中v_school是视图)这个查询很慢,一开始搞不懂为什么,后来发现s.money是在视图里面经过复杂运算得到的。
原因解释:因为v_school查出的每条数据,每次都会比较where后面的s.money>1000,而这个视图数据是百万级的,所以得比较上百万次复杂的s.money,能不慢吗。
解决办法:select * from (select s.row_id,s.money from v_school s) ss where ss.money>1000;
其实这个解决办法也很简单,就是换个思路,把视图数据先查出来,然后在这些数据筛选,这样就快多了,数据也很快查出来了。
案例2:多表left join很慢半天查不出来,解决办法换成(select name from table2 where table2.id=table1.tabledid),name1 from table1。改了之后几秒出来了,极大提高了速度,思路就是子查询。