MYSQL查询优化方法集合

少用一次select * ,少一次苦恼。

小编:这篇杂记,很水

1、避免使用select *查询

2、避免重复查询相同数据

3、mysql是否在扫描额外的记录,尽可能查询只返回需要的数据。最简单的衡量查询开销的3个指标:响应时间,扫描行数,返回的行数。检查慢日志记录是找出扫描行数过多的查询的办法 。

3.1 查看查询扫描的行数与返回行数

3.2 查看扫描行数和访问类型

explain语句中的type列反映了访问类型(全表扫描、索引扫描、范围扫描、唯一索引查询、常数引用等)。

mysql能够使用3钟方式应用where:1、在索引中使用where条件来过滤不匹配的记录(在存储引擎层完成);2、使用索引覆盖扫描(在extra列出现using index)来返回记录,直接从索引中过滤不需要的记录并返回命中的结果(在服务器层完成,无须再回表查询记录);3、从数据表中返回数据,然后过滤不满足条件记录(在extra中出现using where)(在服务器层完成,需要从数据表读取记录然后过滤)

4、若需查询需要扫描大量数据,但是只返回很少的行:

4.1 使用索引覆盖扫描,把所有需要用的列都放到索引中,这样存储引擎无须回表获取对应行就可以返回结果;

4.2 改变数据库结构(如:使用单独的汇总表);

4.3 重写复杂查询(使MYSQL优化器可以用更优化的方式执行此查询)。

5、考虑1个复杂查询还是多个简单查询

6、切分查询:将一个大的查询切分成多个小部分查询(避免一次锁住很多数据、占满事务日志、耗尽系统资源、阻塞其他重要查询,可减少mysql复制的延迟)

7、分解关联查询(优点:让缓存的效率更高;将查询分解后,执行单个查询可以减少锁竞争;在做应用层关联,可以更容易对数据库拆分,更容易做到高性能和可扩展;可减少冗余记录查询)

8、show processlist可以获得现在的查询状态

9、查询缓存:在解析一个查询语句前,如果查询缓存是打开的,那么MYSQL会优先检查这个查询是否命中查询缓存中的数据。

MYSQL通过关键字将SQL语句进行解析,并生成一颗相应的解析树,解析器将使用mysql语法规则验证和解析查询。

10、查询优化器:一个查询有多种执行方式,优化器将找到最好的执行计划。

11、尽可能避免排序或者避免对大量数据进行排序(可查询所需要的列,再根据给定列排序,然后返回结果)

12、索引合并和交叉过滤的方式来定位需要查找的行

13、优化关联查询:确保on或者using子句中的列上有索引;确保任何group by和order by中的表达式只涉及到一个表中的列

14、优化group by和distinct:使用索引优化

15、避免使用select for update

16、尽可能在索引中完成排序;只取出自己需要的列,避免多余的列;尽可能避免复杂的 Join语句和子查询;

17、可用exist代替的条件语句,避免使用in

18、可用分表查询的语句,避免使用join连接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LEEBELOVED

一分钱都是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值