读薄《高性能MySql》(四)查询性能优化
读薄《高性能MySql》(一)MySql基本知识 读薄《高性能MySql》(二)Scheme与数据优化 读薄《高性能MySql》(三)索引优化 读薄《高性能MySql》(四)查询性能优化 对 MySql 进行优化,必须对 Scheme,索引,查询语句一同优化。 通过前面的章节我们掌握了 Scheme 和 索引的优化,最后我们来看一下查询优化。 为了优化查询,我们必须先了解查询是怎样执行的,然后探讨优化器在哪些方面做得还不足,以帮助 MySql 更有效的执行查询。 #优化数据访问 在一条 Sql 语句执行的很慢的时候,可以从以下两个方面来分析: 是否在检索的时候访问了太多的行或者列 MySql 服务器是否在分析大量超过需要的行 请求了不需要的数据 ###万恶之源 SELECT * 一个很好用的观点就是在每次使用 SELECT * 取出全部行的时候都要审视一下自己是否需要全部数据。 取出所有列可能使得索引覆盖无效,一些 DBA 是严格禁止 SELECT * 的写法的。 重复查询数据 有些地方可能会不小心的重复查询了相同的数据。比如在论坛中,如果一个人回复多次,很有可能会一不小心每次都去请求这个人的资料,一个有效的方法就是使用缓存。 扫描额外的记录 确定查询只返回需要的数据以后,接下来该看一下为了返回需要的记录是否扫描了太多行了。有两个指标我们需要关注,一个是扫描的行数和返回行数的比值