Mysql 查询性能优化
查询优化,索引优化,库表结构优化需要齐头并进,一个不能落。
为什么查询速度会慢
在阐释编写快速的查询之前,需要清楚一点,真正重要的是响应时间。如果把查询看做是一个任务的话,那么它由一系列子任务构成,每个子任务都会消耗一定的时间。如果要优化查询,实际上要优化其子任务,要么消除其中一些子任务,要么减少任务的查询次数。通常来说,查询的生命周期大致可以按照顺序来看:冲客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端。其中“执行”可以任务是整个生命周期的重要极端,这其中包括了大量为了检索数据到存储引擎的调用以及调用后的数据处理,包括排序和分组等。
慢查询基础:优化数据访问
1.确认应用程序是否在检索大量超过需要的数据。中通常意味着访问了太多的行,但是有时候也可能访问了太多的列。
2.确认MySQL服务器层是否分析大量超过需要的行。
是否想数据库请求了不需要的数据
1查询了不需要的记录
2多表关联时返回了全部的列
一般MySQL能够使用如下三种方式应用WHERE条件,从好到坏依次为:
1在索引中使用WHERE 条件来过滤不匹配的理论,这是在存储引擎中完成的。
2使用索引覆盖扫描(在Extra列中出现了Using index) 来返回记录的,直接从索引中过滤不需要的记录并返回命中结果。这是在MySQL服务器完成的,但无需在回表查询记录。
3从数据表中返回数据,然后过滤不满足的距离(在Extra列中出现了Using where )。这在MySQL服务器层完成,MySQL首先需要从数据表读出记录,然后过滤。
如果发现查询需要扫描大量的数据,但只是返回了少数行,那么通常可以尝试下面的技巧去优化它:
1使用索引覆盖扫描,把所有需要用的列都放到索引中,这样存储引擎无需回表获取对应行就可以返回结果了
2改变库表结构。例如:单独使用汇总表。
3重写这个复杂的查询,让MySQL优化器能够以更优化的方式执行这个查询
3总是取出全部的列(每次看到SELECT * 的时候都需要用怀疑的样审视,是不是真的需要返回全部的列。取出全部的列,优化器无法完成索引覆盖扫描这类优化,还肯能会为服务器带来额外的io,内存和cpu消耗)
4重复查询相同的数据(最好的方法是,当初次查询的时候将这个数据缓存起来,需要的时候从缓存取出,这样做性能更好。)
Mysql 查询性能优化的更多相关文章
- MySQL查询性能优化(精)
MySQL查询性能优化 MySQL查询性能的优化涉及多个方面,其中包括库表结构.建立合理的索引.设计合理的查询.库表结构包括如何设计表之间的关联.表字段的数据类型等.这需要依据具体的场景进行设计.如下 ...
- 170727、MySQL查询性能优化
MySQL查询性能优化 MySQL查询性能的优化涉及多个方面,其中包括库表结构.建立合理的索引.设计合理的查询.库表结构包括如何设计表之间的关联.表字段的数据类型等.这需要依据具体的场景进行设计.如下 ...
- 到底该不该使用存储过程 MySQL查询性能优化一则
到底该不该使用存储过程 看到<阿里巴巴java编码规范>有这样一条 关于这条规范,我说说我个人的看法 用不用存储过程要视所使用的数据库和业务场景而定的,不能因为阿里巴巴的技术牛逼,就视 ...
- MySQL查询性能优化七种武器之索引下推
前面已经讲了MySQL的其他查询性能优化方式,没看过可以去了解一下: MySQL查询性能优化七种武器之索引潜水 MySQL查询性能优化七种武器之链路追踪 今天要讲的是MySQL的另一种查询性能优化方式 ...
- MySQL优化技巧之五(mysql查询性能优化)
对于高性能数据库操作,只靠设计最优的库表结构.建立最好的索引是不够的,还需要合理的设计查询.如果查询写得很糟糕,即使库表结构再合理.索引再合适,也无法实现高性能.查询优化.索引优化.库表结构优化需要齐 ...
- MySQL查询性能优化---高性能(二)
转载地址:https://segmentfault.com/a/1190000011330649 避免向数据库请求不需要的数据 在访问数据库时,应该只请求需要的行和列.请求多余的行和列会消耗MySql ...
- 《高性能MySQL》之MySQL查询性能优化
为什么查询会慢? 响应时间过长.如果把查询看做是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.如果要优化查询,实际上优化其子任务,要么消除其中一些子任务,要么减少子任务的执行次数, ...
- mysql查询性能优化
mysql查询过程: 客户端发送查询请求. 服务器检查查询缓存,如果命中缓存,则返回结果,否则,继续执行. 服务器进行sql解析,预处理,再由优化器生成执行计划. Mysql调用存储引擎API执行优化 ...
- MySQl 查询性能优化相关
0. 1.参考 提升网站访问速度的 SQL 查询优化技巧 缓存一切数据,读取内存而不是硬盘IO 如果你的服务器默认情况下没有使用MySQL查询缓存,那么你应该开启缓存.开启缓存意味着MySQL 会把所 ...
随机推荐
- 【Oracle】ORACLE SQL Developer不支持JAVA版本
ORACLE SQL Developer不支持JAVA版本 今天我打开 ORACLE SQL Developer准备开始练手.没有想到却给出了错误提示. 我 是安装了java JDK的而且是1.6版本 ...
- redgate
http://www.cnblogs.com/VAllen/archive/2012/09/08/SQLPrompt.html http://www.cnblogs.com/dotLive/archi ...
- Binary Tree Inorder Traversa
package cn.edu.xidian.sselab.hashtable; import java.util.ArrayList;import java.util.List;import ja ...
- SqlServer新建视图
一.使用SQL Server 2005数据库管理系统创建视图 1. 启动SQL Server 2005. 2. 在“对象资源管理器”窗口中找到Student数据库,打开Student文件夹,在“视图” ...
- 32位vs2010的项目如何在64位系统上运行
64位注册 1. 关闭Visual Studio.2. 在Visual Studio Tools目录,以管理员身份运行Visual Studio Command Prompt (2010),[注:这个 ...
- SRM470 - SRM474(1-250pt,500pt)(471-500pt为最短路,474-500pt未做)
SRM 470 DIV1 250pt 题意:有n个房间排成一排,相邻两个房间之间有一扇关闭着的门(共n-1扇),每个门上都标有‘A’-‘P’的大写字母.给定一个数n,表示第n个房间.有两个人John和 ...
- sicily 1119 Factstone Benchmark
题意:求满足n! < 2^k,n的最大值! 解题:指数比较转换成对数比较,达到降幂! 其中: log (n!) = log(n)+log(n-1)+...+log(1); log(2^k) = ...
- html自定义提示框
自定义html提示框比较令人困惑的就是编写三角形的样式:以前的实现方式是在标签内使用span标签来实现.不过现在有了css提供的两个为类:before,:after之后,可以不用再内置span标签了: ...
- 2015 GOOGLE I/O大会看点总结:新的开发工具及云端测试工具
http://ask.android-studio.org/?/article/48 尽管凌晨开始的主题演讲略显晦涩并继承了谷歌一贯的东一句西一句想起啥说啥的混乱风格,但期待用技术改变世界的技 ...
- hdu1074 Doing Homework(状态压缩DP Y=Y)
Doing Homework Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...