执行下面语句发现查询数据非常慢,要30多s:
SELECT t0.* FROM Vsyslog t0 where message like '%Username = teddy%' LIMIT 0,10
(其中Vsyslog 是视图)这个查询很慢,一开始搞不懂为什么,后来发现message 是在视图里面经过复杂运算得到的。
原因解释:因为Vsyslog 查出的每条数据,每次都会匹配where后面的,而这个视图数据是百万级的,所以得比较上百万次复杂的message ,能不慢吗。
解决办法:select * from (select s.endTm,s.message from Vsyslog s) ss where ss.message like '%Username = teddy%'
其实这个解决办法也很简单,就是换个思路,把视图数据先查出来,然后在这些数据筛选,这样就快多了,数据也很快查出来了。