摘要: MySQL执行一个查询的过程,可以用下图表示: 我们可以看到当向MySQL发送一个请求的时候,MySQL究竟做了什么: 1、客户端发送一条查询给服务器。 2、服务器先检查查询缓存,如果命中了缓存,则立刻返回存储在缓存中的结果。否则进入下一个阶段。 3、服务器端进行SQL解析、预处理,再由优化器生成对 阅读全文
posted @ 2018-12-17 17:28 小林子奋斗的点滴 阅读(135) 评论(0) 推荐(0)
摘要: 设计查询的时候一个需要考虑的重要问题是,是否需要将一个复杂的查询分成许多简单的查询。MySQL内部每秒能够扫描内存中上百万行数据,相比之下,MySQL响应数据给客户端就慢的多了。所以,有时候将一个大的查询分解为多个小查询是有必要的。 4.3.1 切分查询 一个大查询如果一次性执行的话,可能一次锁住很 阅读全文
posted @ 2018-12-17 11:29 小林子奋斗的点滴 阅读(302) 评论(0) 推荐(0)
摘要: 1. 减少请求的数据量 只返回必要的列:最好不要使用 SELECT * 语句。 只返回必要的行:使用 LIMIT 语句来限制返回的数据。 缓存重复查询的数据:使用缓存可以避免在数据库中进行查询,特别在要查询的数据经常被重复查询时,缓存带来的查询性能提升将会是非常明显的。 2. 减少服务器端扫描的行数 阅读全文
posted @ 2018-12-17 10:45 小林子奋斗的点滴 阅读(114) 评论(0) 推荐(0)
摘要: 为什么查询速度会慢? 在尝试编写快速的查询之前,真正重要的是响应时间。如果把查询看做一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间。如果要优化查询,实际上是要优化其子任务,要么消除其中的一些子任务,要么减少子任务的执行次数。 下面来看看如何进行性能优化: 使用 Explain 进行 阅读全文
posted @ 2018-12-17 10:14 小林子奋斗的点滴 阅读(113) 评论(0) 推荐(0)
摘要: 1. 独立的列 在进行查询时,索引列不能是表达式的一部分,也不能是函数的参数,否则无法使用索引。 例如下面的查询不能使用 actor_id 列的索引: 2. 多列索引 在需要使用多个列作为条件进行查询时,使用多列索引比使用多个单列索引性能更好。例如下面的语句中,最好把 actor_id 和 film 阅读全文
posted @ 2018-12-17 09:52 小林子奋斗的点滴 阅读(163) 评论(0) 推荐(0)
摘要: 大大减少了服务器需要扫描的数据行数。 帮助服务器避免进行排序和分组,以及避免创建临时表(B+Tree 索引是有序的,可以用于 ORDER BY 和 GROUP BY 操作。临时表主要是在排序和分组过程中创建,因为不需要排序和分组,也就不需要创建临时表)。 将随机 I/O 变为顺序 I/O(B+Tre 阅读全文
posted @ 2018-12-17 09:50 小林子奋斗的点滴 阅读(185) 评论(0) 推荐(0)