CI框架添加sql日志及优化记录

今天从第三方网站上检测到我们的资讯页打开速度比较慢,在优化之前同事的代码过程中的一些经验,记录下来方便自己回顾。

某个页面打开速度比较慢,首先查看了下mysql的慢查询日志,发现并没有记录,慢查询设置的是1S,说明单条sql的查询速度并没有很慢。然后就去检查CI的SQL日志,这里说下我们在CI框架中添加了所有的SQL执行日志(链接:缺),以备检查。

检查到某条SQL查询速度比较慢:

SELECT `exp_dnbiz_article`.* FROM (`exp_dnbiz_article`) JOIN `exp_dnbiz_article_type` AS t ON `exp_dnbiz_article`.`article_type_id`=`t`.`id`
WHERE `article_type_id` = ‘1’ AND `delete_status` = 1 AND `show_status` = ‘Is_show’ AND `article_type_id` != ‘6’
AND `t`.`parent_id` != ‘7’ AND `article_date` < ‘2018-04-04 13:38:48’ ORDER BY `article_date` DESC;

耗时:3.983s   查看索引又很快

而且没进慢日志查询,说明执行速度在1s以内,检查后发现是查询数据太大,导致传输速度慢,调整为查询只需要的字段,而不是* 后,查询效率明显提高。

总结针对字段存储字节比较大的数据,在查询时不要简单用*来查询全部,而是只查询要使用的字段即可。

然后寻找原因,为什么这里要查询这么多条数据处理,按照业务逻辑应该查询一条即可。找到代码截图如下:

发现用的是CI自己封装的辅助查询函数,但是这里是先查询出所有数据后取第一条,从而导致查询开销过大,速度较慢,如果只差1条,还是用limit0,1,而不是直接用CI的辅助查询方法,都是细节疏忽导致的。

附CI关于row()的辅助函数说明文档:

发表评论

电子邮件地址不会被公开。 必填项已用*标注