MySQL Select 优化
准备:
create table t(x int primary key,y int unique,z int);
insert into t(x,y,z) values(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5),(6,6,6),(7,7,7),(8,8,8),(9,9,9);
情况1:select 没有用到索引
explain select z from t;

type = all 说明是全表扫描、也就是说把表中的数据都读一遍才得到结果、这种查询通常是非常慢的。为查询加上与之匹配的索引效果会好许多。
情况2:用到了索引
select y from t;

type = index 说明查询用到了索引、与type=all相比由于不要把整个表载入内存,只要载入索引就可以完成查询、所以数据的读取量就少了。相比type=all通常会快一些。
情况3:
用到了索引、但是只需要载入索引的一部份就可以完成查询
select min(y),max(y) from t;

与情况2相比它更加牛逼、table=null说明它不用去表里面找、type=null看起来它索引都没有用到就好像它是从计数器中取到的一样。但是我认为它还是走了索引的,只不过是索引的一小部分。注意它的Extra 说明“Select tables optimized away”
情况4:
where 条件有索引可用,select 执行count,sum
select count(y),sum(y) from t where y>3;

key = y 说明使用了索引y、 type = range 说明它不用载入整个索引、只要载入一部分就可以了(y>3的部分)。
情况5:
where 段有主键索引可用,select 段是聚合函数
select sum(x),min(x),max(x),count(x) from t where x>3;

这里我有一个问题就是情况5中的key_len是4情况4中的key_len是5但是x,y可都是int 类型啊!说明一下using index 说明Mysql将使用覆盖索引、using where说明
存储引擎在扫描时就可以用条件进行过滤、不用扫描整个索引。所以using where + using index 的性能为using index 要好一些。
情况6:
复合索引对聚合函数的优化(索引头部)
在这里重新创建一个表
create table t(x int primary key,y int,z int ,index ix_yz (y,z));//在x 上有聚集索引,(y,z)组成复合索引。
insert into t(x,y,z) values(1,1,1),(2,2,2),(3,3,3),(4,4,4);
索引前缀对聚合函数的优化
select min(y) from t;(这个时候Mysql 不会从表中扫描、有索引前缀就可以了、但是key=null and Select tables optimized away)

情况7:
复合索引对聚合函数的优化(索引后缀)
select min(z) from t;

可以看到用到了索引 ix_yz、说明它没有走了索引。
MySQL Select 优化的更多相关文章
- Mysql - 性能优化之子查询
记得在做项目的时候, 听到过一句话, 尽量不要使用子查询, 那么这一篇就来看一下, 这句话是否是正确的. 那在这之前, 需要介绍一些概念性东西和mysql对语句的大致处理. 当Mysql Server ...
- Mysql性能优化三(分表、增量备份、还原)
接上篇Mysql性能优化二 对表进行水平划分 如果一个表的记录数太多了,比如上千万条,而且需要经常检索,那么我们就有必要化整为零了.如果我拆成100个表,那么每个表只有10万条记录.当然这需要数据在逻 ...
- Mysql性能优化一
下一篇:Mysql性能优化二 mysql的性能优化无法一蹴而就,必须一步一步慢慢来,从各个方面进行优化,最终性能就会有大的提升. Mysql数据库的优化技术 对mysql优化是一个综合性的技术,主要包 ...
- 关于MySQL数据库优化的部分整理
在之前我写过一篇关于这个方面的文章 <[原创]为什么使用数据索引能提高效率?(本文针对mysql进行概述)(更新)> 这次,主要侧重点讲下两种常用存储引擎. 我们一般从两个方面进行MySQ ...
- [MySQL性能优化系列]提高缓存命中率
1. 背景 通常情况下,能用一条sql语句完成的查询,我们尽量不用多次查询完成.因为,查询次数越多,通信开销越大.但是,分多次查询,有可能提高缓存命中率.到底使用一个复合查询还是多个独立查询,需要根据 ...
- [MySQL性能优化系列]巧用索引
1. 普通青年的索引使用方式 假设我们有一个用户表 tb_user,内容如下: name age sex jack 22 男 rose 21 女 tom 20 男 ... ... ... 执行SQL语 ...
- 30多条mysql数据库优化方法,千万级数据库记录查询轻松解决(转载)
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- mysql 性能优化方向
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- MySQL性能优化总结
一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎 ...
随机推荐
- poj3122--二分加贪心
大致题意: 就是公平地分披萨pie 我生日,买了n个pie,找来f个朋友,那么总人数共f+1人 每个pie都是高为1的圆柱体,输入这n个pie的每一个尺寸(半径),如果要公平地把pie分给每一个人(就 ...
- jsp 配置MySQL服务器 以及数据的插入和读取
不多说,直接上代码.百度上面也是一大堆,大家多问百度就行. 在利用JDBC访问数据库过程中,主要涉及三种资源:对数据库的连接的连接对象Connection,SQL语句对象 Statement,访问结果 ...
- Hibernate之总结
以前做.net,最近做java项目,负责服务端的开发,直接用的jdbc,线程安全问题.缓存同步问题以及连接池什么的,都是手动写,不但麻烦而且容易出错.项目结束,赶快抽时间学了下hibernate,每天 ...
- Oracle中强行断开用户连接的方法
版权声明:本文为博主原创文章,未经博主允许不得转载. 首先查找目标用户的当前进程,注意是serial#而不是serial,网上有的介绍漏掉了#: select sid,serial# from v$s ...
- C#/ASP.NET应用程序配置文件app.config/web.config的增、删、改操作
原文 http://www.cnblogs.com/codealone/archive/2013/09/22/3332607.html 应用程序配置文件,对于asp.net是 web.config,对 ...
- Android系统Recovery工作原理之使用update.zip升级过程---updater-script脚本语法简介以及执行流程(转)
目前update-script脚本格式是edify,其与amend有何区别,暂不讨论,我们只分析其中主要的语法,以及脚本的流程控制. 一.update-script脚本语法简介: 我们顺着所生成的脚本 ...
- 蓝桥杯之K好数问题
问题描述 如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数.求L位K进制数中K好数的数目.例如K = 4,L = 2的时候,所有K好数为11.13.20.22 ...
- 备机大地院系项目dataguard archived_log及standby_log
主库archivelog及standbylog 仅仅是测试4天的数据,项目并未正式上线/data/dddb/DBSoftware/app/oracle/product/11.2.0/dbhome_1/ ...
- kvm中运行kvm
如何在 KVM 虚拟机上运行 KVM 上次讨论了如何在 VMware ESXi 虚拟机上运行 KVM 问题,前不久有读者想 “在 kvm 上面创建个虚拟机安装 rackspace 的 openstac ...
- WKWebView与sessionID的因果
问题描述:在webView中点击下载按钮后,下载成功文件,然后再去点击上传文件,这时候服务器会报用户未登录错误. 暂时分析的原因是WKWebView在下载后cookie会保存服务器产生的session ...