前段时间帮客户迁移了一个网站,迁移前数据库使用的是mysql5.5,迁移后使用的是mysql5.7。当经过一番折腾之后,网站重新上线运行,遂电话告知客户,一会儿他打来电话说访问不了,我试了下能访问,但是巨慢。据客户说之前运行正常,没出现这么慢的情况,没办法,既然收了人家的银子,就给人家解决吧。
看了下慢查询日志,发现不少语句耗时都在10秒以上,最多还有耗时秒的。这就纳了闷了,难道跟数据库版本有关系,网上搜了一番,也没说5.7的版本比5.5有啥大变化的。遂开始逐条分析sql语句,查看执行计划。
比如慢查询日志中的这条语句,耗时多条。
#Time:-10-15T16:15:05.Z
#Query_time:.Lock_time:0.Rows_sent:55Rows_examined:
SETtimestamp=;
select*fromsnewssnwheresn.schoolid=andisverified=1orderbyaddtimedesc;
查看执行计划:
explainselect*fromsnewssnwheresn.schoolid=andisverified=1orderbyaddtimedesc;
1.Extra字段表明查询中使用了where,但type值是ALL,说明是全表扫描;
2.possible_keys和key值都为空,说明没有使用到索引或者该表没有建立索引;
3.Extra字段还表明该查询使用到了文件排序。
针对如上问题,建立组合索引即可,创建组合索引语句如下
CREATEINDEXidx_news_