0115关于索引认识

-- 关于索引一点理解
1从整体理解联合索引,ORDER BY以及GROUP BY之间的过程
-- 改语句很有代表性,自己分析,理解为什么
CREATE TABLE t6(
c1 CHAR(1) NOT NULL DEFAULT ‘‘,
c2 CHAR(1) NOT NULL DEFAULT ‘‘,
c3 CHAR(1) NOT NULL DEFAULT ‘‘,
c4 CHAR(1) NOT NULL DEFAULT ‘‘,
c5 CHAR(1) NOT NULL DEFAULT ‘‘,
KEY(c1,c2,c3,c4)
)ENGINE INNODB CHARSET utf8;

INSERT INTO t6 VALUES(‘a‘,‘b‘,‘c‘,‘d‘,‘e‘);

EXPLAIN
SELECT * FROM t6 WHERE c1=‘a‘ AND c2=‘b‘ AND c4>‘a‘ AND c3=‘c‘;

EXPLAIN
SELECT * FROM t6 WHERE c1=‘a‘ AND c2=‘b‘ AND c4=‘a‘ ORDER BY c3;

EXPLAIN
SELECT * FROM t6 WHERE c1=‘a‘ AND c2=‘b‘ AND c4=‘a‘ ORDER BY c5;

EXPLAIN
SELECT * FROM t6 WHERE c1=‘a‘ AND c5=‘a‘ ORDER BY c2,c3;

EXPLAIN
SELECT * FROM t6 WHERE c1=‘a‘ AND c5=‘a‘ ORDER BY c3,c2;

EXPLAIN
SELECT * FROM t6 WHERE c1=‘a‘ AND c2=‘b‘ AND c5=‘a‘ ORDER BY c2,c3;

EXPLAIN
SELECT * FROM t6 WHERE c1=‘a‘ AND c2=‘b‘ AND c5=‘a‘ ORDER BY c3,c2;-- [改写为order by c3,‘b‘],故直接修改为order by c3,语句写的冗余

EXPLAIN
SELECT * FROM t6 WHERE c1=‘a‘ AND c4=‘d‘ GROUP BY c2,c3;

EXPLAIN
SELECT * FROM t6 WHERE c1=‘a‘ AND c4=‘d‘ GROUP BY c3,c2;

-- 有时候使用了索引但是不会计入到key_len的长度当中,但是我们发现他们区别在extra中 使用索引的using where,但是没有使用索引的using tempary;using filsort

理解图片

2关于EXPLAIN中ROWS自己的一点认识
-- 需要扫描的行数,代表必须
EXPLAIN
SELECT * FROM ta WHERE rid1=429 AND rid2=36

SELECT * FROM ta WHERE rid2=36-- 12
-- 相当于先通过索引找到12行符合条件的语句,所以扫描行数肯定为12,然后回表使用where进行过滤,得到最终的6条
-- 所以建立更好的索引,可以减少扫描行数,索引功能作用大大的

一条SQL语句的执行过程

3关于mysql是如何进行group by的分析结构

所以建立有效的索引,可以避免Using tempary;Using filesort;

时间: 2024-10-30 22:47:01

0115关于索引认识的相关文章

MySQL 索引优化原则

一.索引优化原则 1.最左前缀匹配原则,联合索引,mysql会从做向右匹配直到遇到范围查询(>.<.between.like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整. 2.=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优

MySQL索引基本应用[转]

原文地址:http://www.php100.com/html/webkaifa/database/Mysql/2010/0409/4279.html 索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT N

python--15 字典:当索引不好用

字典是python唯一的影射类型 hash >>> brand = ['李宁', '耐克', '阿迪达斯'] >>> slogan = ['一切皆有可能', 'Just do it','Impossible is nothing'] >>> print('李宁的口号是:',slogan[brand.index('李宁')]) 李宁的口号是: 一切皆有可能 字典不是序列类型 ,是映射类型 字符串 列表 元组是序列类型 创建和访问索引   标志性符号--花

MongoDB 学习笔记之 TTL索引,部分索引和文本索引

TTL索引: TTL集合支持mongodb对存储的数据进行失效时间设置,经过指定的时间段后.或在指定的时间点过期,集合自动被mongod清除.这一特性有利于对一些只需要保存一定时间的数据信息进行存储,比如机器产生的事件数据.日志.会话信息等. 先创建一个集合TTLCol: 创建TTL索引,60秒过期. 60秒后查询发现数据被删除了. 部分索引: MongoDB部分索引只为那些在一个集合中,满足指定的筛选条件的文档创建索引.由于部分索引是一个集合文档的一个子集,因此部分索引具有较低的存储需求,并降

CUDA 计算线程索引的一般公式

CUDA thread index: int blockId = blockIdx.z * (gridDim.x*gridDim.y)                    + blockIdx.y * gridDim.x                    + blockIdx.x; int threadId = blockId * (blockDim.x * blockDim.y * blockDim.z)                      + threadIdx.z * (blo

检测和整理索引碎片

索引碎片的检测和整理 存储数据是为了查找数据,存储结构影响数据查找的性能.对无序数据进行查找,最快的查找算法是哈希查找:对有序数据进行查找,最快的查找算法是平衡树查找.在传统的关系型数据库中,聚集索引和非聚集索引都是平衡树(B-Tree)类型的存储结构,用于顺序存储数据,便于实现数据的快速查找.除了提升数据查找的性能之外,索引还能减少硬盘IO和内存消耗.通常情况下,硬盘IO是查找性能的瓶颈,由于索引是数据表的列的子集,这意味着,索引只存储部分列的数据,占用的硬盘空间比全部列少了很多,因此,数据库

16_索引是什么?

找数据有哪些方式? -- 全表扫描,但是当数据量达到几万以上,查询速度就慢了 什么是索引? -- 相当于书的目录,便于查找,索引指向字段, -- mysql使用 B+tree 索引,本质上是二叉树 索引有哪些分类? -- 普通:单列做索引,只能帮助查找 -- 唯一:单列增加唯一约束,只能设一个Null,也可以多列联合唯一 -- 主键:内容不允许重复,不能为Null,一张表只能有一个主键,可以多列联合主键 -- 组合:多列共同组合成索引,可以给多列增加唯一约束 -- 全文:分词,mysql依据逗号

深入浅出分析MySQL索引设计背后的数据结构

在我们公司的DB规范中,明确规定: 1.建表语句必须明确指定主键 2.无特殊情况,主键必须单调递增 对于这项规定,很多研发小伙伴不理解.本文就来深入简出地分析MySQL索引设计背后的数据结构和算法,从而可以帮你释疑如下问题: 1.为什么innodb表需要主键? 2.为什么建议innodb表主键是单调递增? 3.为什么不建议innodb表主键设置过长? B-tree(多路搜索树,并不是二叉的)是一种常见的数据结构.使用B-tree结构可以显著减少定位记录时所经历的中间过程,从而加快存取速度.B通常

mysql索引介绍

在数据表中对字段建立索引将大大提高查询的速度: 例如:select * from mytable where username='admin' 如果在列username上建立了索引,只需要一次就可以找到该记录 一.mysql索引的类型: 1.普通索引 创建:create index indexname on mytable(username) 删除:drop index [indexname] on mytable 2.唯一索引 特点:索引列值必须唯一,但允许有null值 创建:create u