高性能MySQL(第三版)-第六章 2

2021-08-03  本文已影响0人  这里有颗小螺帽

高性能MySQL(第三版) 是在MySQL5.5的基础上进行讲解的。
研读了第六章 查询性能优化的5-6小节,记录一些知识点。

select ... from tb1 where b between 2 and 5

因为索引的前导字段是 a,但是查询的 where 条件中只指定了字段 b,MySQL 无法使用 (a,b) 这个索引,只能全表扫描,因为 MySQL不支持松散索引扫描

select film_id,description from sakila.film order by title limit 50,5

SQL的功能是查找出第50-54条数据并返回,MySQL是这样处理的,把0-54条数据都查出来,然后将50之前的数据舍弃,这样做对性能的影响很大。

并且查询过程是这样的:
1.先通过非主键索引找到主键索引的值film_id,但是还需要查出字段description的值,所以还需要再通过主键索引的值查到所需要的数据description,也就是需要两次查询
2.上面这个SQL是先关联查询出所有的数据,然后再limit

通过如果用延迟关联,性能会有提升,修改后SQL如下:

select film.fim_id,film.description from sakila.film 
INNER JOIN (
      select film_id from sakila.fim order by title limit 50,5
) as lim USING(fim_id)

这样先将需要数据的主键id查出来,然后再进行关联查询,提升了性能

上一篇 下一篇

猜你喜欢

热点阅读