数据库优化一点总结
以前找工作的时候总被面试到数据库方面的知识,尤其是数据库优化。当然在去面试之前先补习一下,背一些网上的概念来应付。现在想想,要考察一个开发者数据库优化方面的知识只需要问一下有没有做过数据库设计和优化就行,如果做过相关工作那么多少会总结出来一些,如果没做过说出再多也是概念而已。
国庆节前韩豆咖派上线,然后这个节日就不会有好日子过了,上线三四天的时候很多用户反映帖子刷新不出来,登陆不了等问题,起初我以为是放假了大家回家网络不好导致的,后来测试了下接口花了一分多钟数据才返回,看来不是网络问题。查了下数据库帖子数量,居然达到6万了,想到以前背的概念,首先加索引试试,果然快了。但是节后数量达到12万的时候又出现了相同的问题,有点纳闷,索引页加了怎么还是慢呢?经过多次试验,分拆复杂查询后得出结论是由于查询语句中使用了left join自连接查询,通俗的说就是在12万数据中找出需要的数据,然后再在这12万中找出关联数据,光是这两个12万都够吓人了。最后还是把复杂的sql分解用程序控制查询子句,速度果然又提高了。
得出结论,一句复杂的sql不一定是最好的,分解成多句简单的sql可能有质的飞跃。这个方案在《高性能MYSQL》一书中也提到了,补充个图片:
但是对于sql查询到底该一次复杂查询还是多次简单查询没有明显界限,只有当一条复杂查询发现很慢的时候再分析慢的原因多次试验后就能知道哪个是最好的,而且复杂的sql也不利于优化,可能加了索引都没用,也不能使用查询缓存。当一条复杂的sql需要花3秒钟才能查出来的时候分拆的简单sql可能每秒可以查询5000次了.