key_len:
copy from https://www.cnblogs.com/lukexwang/articles/7060950.html
key_len表示索引使用的字节数,根据这个值可以判断索引的使用情况,特别是在组合索引的时候,判断该索引有多少部分被使用到非常重要。
在计算key_len时,下面是一些需要考虑的点:
索引字段的附加信息:可以分为变长和定长数据类型讨论,当索引字段为定长数据类型时,如char,int,datetime,需要有是否为空的标记,这个标记占用1个字节(对于not null的字段来说,则不需要这1字节);对于变长数据类型,比如varchar,除了是否为空的标记外,还需要有长度信息,需要占用两个字节。
对于,char、varchar、blob、text等字符集来说,key len的长度还和字符集有关,latin1一个字符占用1个字节,gbk一个字符占用2个字节,utf8一个字符占用3个字节。
综上,下面来看一些例子:
detail text(10) utf8 key_len=30*3+2+1 TEXT截取部分,被视为动态列类型。
备注:key_len只指示了where中用于条件过滤时被选中的索引列,是不包含order by/group by这一部分被选中的索引列的。
例如,有个联合索引idx(c1,c2,c3),3列均是int not null,那么下面的SQL执行计划中,key_len的值是8而不是12:
select … from tb where c1=? and c2=? order by c1;
这句话的意思是: 没有使用完全索引
通过这个案例,就可以知道 有没有完全使用索引。
====================================================================================
下面分享一个在实际工作中经常用到却很容易被忽视的一个优化[url=http://www.kubiji.cn/forum-id266.html]mysql[/url]查询效率的方法,合理的使用limit 1。
目前有如下一张表(用户表):
create table member(
id int primary key auto_increment,
username varchar(40),
password varchar(40));
我们在开发中的登录操作经常这样写:
SELECT * FROM member WHERE username
=‘www.kubiji.cn’;
或者:
SELECT * FROM member WHERE username
=‘www.kubiji.cn’ LIMIT 1;
这两种查询方法都很常见,但你知道他们的实际差别吗?
经作者以100万条数据做测试得出结果:
第一条查询语句耗时 0.56 s
第二条使用了 LIMIT 1 后的查询语句耗时 0.28 s
由上可见在数据量很大的情况下,适当的使用LIMIT 1对查询操作的优化效果还是相当明显的。
注意:如果以上表字段中username被设置为了索引的话,这个时候使用LIMIT 1在查询速度上没有明显的效果。因为没有索引时会全表扫描,limit 1在找到后退出;有索引时很快能找完username
='www.kubiji.cn’的数据,所以用处不大。
版权声明:本文为优快云博主「酷笔记」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/phmiscro/article/details/84832666
另外关于为什么limit 1会在select完全表前执行的原因,以下是网上找到的一个答案:
整个执行sql的过程,是一步一步的,其实这个想法没错,确实是一步一步来完成的,但考虑到内存资源有限,并不是会把所有数据过滤出来后,在做下一步操作。
而是按照总体次序,先where,然后limit,但是这个过程并不说 mysql要做完所有的where之后,才会应用limit,而是做一步,判断一下,次序总是先where,后limit判断,这个次序是不变的。
同样的,先where后select,是做一步where,然后再select,所以,如果数据量大,你会发现数据都是一部分一部分出来的,不会一下子出来。
====================================================================================
====================================================================================
====================================================================================
====================================================================================
====================================================================================
====================================================================================