Mysql查询性能优化

查询性能低下根本原因是访问数据过多,包括过多和行与过多的列,重复查询.

比如:查询100条,只用了10条,其它的丢弃 , 再比如  select * 操作,返回过多不使用的列

        重复查询相同数,可以第一次查询的时候缓存。

        实际案例:查询手机通信指标,首页显示7个指标,但有一个详情页面显示20个指标,原实现方案中,返回所有列在页面进行缓存。改进方案:由于详情很少用,所以在点详情的时候,再进行访问。


使用合适的索引进行where查询,一般mysql有三种方式应用where条件,由好到坏:

  1. 在索引中使用 WHERE条件来过滤不匹配的记录。 这是在存储引擎层完成 的。
  2. 使用索引覆盖扫描(在 Extra 列中出现了Using index) 来返回记录, 直接从索引中过滤不需要的记录并返回命中的结果。 这是 在 MySQL 服务器层完成的, 但无须再回表查询记录。
  3. 从数据表中返回数据, 然后过滤不满足条件的记录( 在Extra 列中出现 Using Where)。 这在MySQL服务器层完成, MySQL 需要先从数据表读出记录然后过滤。

如果发现查询需要扫描大量的数据但只返回少数的行,那么通常可以尝试下面的技巧去优化它:

  1. 使用索引覆盖扫描, 把所有需要用的列都放到索引中, 这样存储引擎无须回表获取对应行就可以返回结果了。
  2. 改变库表结构。例如使用单独的汇总表.
  3. 重写这个复杂的查询, 让MySQL优化器能够以更优化的方式执行这个查询.

分解关联查询:许多高性能应用都会对关联查询进行分解,把一个大查询分解决成多个小查询,在应用程序里进行关联操作,优势如下:

  1. 数据库缓存效率更高
  2. 单个查询可减少锁的竞争
  3. 使用IN 代替关联,可以让Mysql按ID顺序进行查询,可能比随机关联更高效.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值