查询性能优化流程:
1.分析原因:为什么会慢?(慢查询日志,简单的衡量指标:相应时间、扫描行数、返回行数、扫描行数/返回行数:1/1-1/10较好)
数据访问:
a.确认应用程序是否在检索大量超过需要的数据。这通常意味着访问了太多的行,但有时候也可能访问了太多的列。
b.确认MySQL服务器层是否存在大量超过需要的数据行。
2.重构查询方式:
a.一个复杂查询还是多个简单查询
b.切分查询
c.分解关联查询(优势:>让缓存的效率更高。
>将查询分解后,执行打个查询减少锁的竞争
>在应用层做关联,可以更容易对数据库进行拆分,更容易做到高性能和可扩展)
>查询本身效率也可能会有所提升。
>可以减少冗余记录的查询。
>更进一步,这样做相当于在应用中实现了哈希关联,而不是使用MySQL的嵌套循环关联。)
查询执行路径图:
tips:
MySQL通常会先把结果写入临时表(结果集),然后再将临时表的数据返回给客户端(应该是考虑到缓存的使用),而不会直接将结果返回给客户端。
一个查询语句的解析顺序:
where>group by >order by>fields
test:
SET @rownum = 0;SELECT id, tel, `name`, (@rownum:[email protected]+1) as cnt from `user`
WHERE @rownum<1
GROUP BY tel
ORDER BY `name`, (@rownum := @rownum*1)
使用MySQL构建一个队列: