你网站装了两年,文章也才几百篇。但最近后台打开文章列表要5秒,前台翻页也卡。主机是新换的,带宽也够。问题出在数据库——慢查询。
什么是慢查询
每次打开网页,CMS都要从数据库查数据:这篇文章是什么、有哪些评论、相关文章是哪几篇。正常查询零点几秒就完成。但如果SQL语句写得不好,或者表数据量大没加索引,一次查询要几秒。
一个页面有十几个这样的查询,加起来就卡了。
怎么排查
宝塔面板有「MySQL日志」。打开慢查询日志,记录执行超过1秒的SQL。跑一天,看看哪些SQL最慢。
一般慢在这几个地方:
第一,文章列表翻页太深。翻到第100页,数据库要扫描前面所有记录。小站文章多了之后就慢。
第二,标签页、归档页数据量大。一个热门标签下有几百篇文章,打开标签列表页要查很久。
第三,插件写的烂。有些插件每次页面加载都跑一堆SQL查询,还没加索引。
怎么优化
第一,数据库加索引。技术活,让懂的人给文章表、评论表的常用查询字段加索引。加完查询速度快10倍。
第二,装缓存插件。前面讲过页面缓存。开了缓存,数据库不用每次都查,直接返回静态HTML。慢查询问题直接缓解。
第三,卸载不用的插件。每个插件都可能在加查询。插件越少,数据库压力越小。
第四,文章别放太多在一个标签下。热门标签拆成更细的子标签。
小站一般文章几千篇以内都不会太慢。真卡了先开页面缓存,大部分情况就好了。


