mysql myclre_mysql 索引及查询优化总结
背景:总结mysql索引相关的知识点.
MySQL 索引及查询优化总结
ps:其中的b+树有误。对or的使用有误。总体还是很详尽的
注意:索引是在存储引擎中实现的,也就是说不同的存储引擎,会使用不同的索引。MyISAM和InnoDB存储引擎:只支持BTREE索引,也就是说默认使用BTREE,不能够更换。MEMORY/HEAP存储引擎:支持HASH和BTREE索引。
1、索引我们分为四类来讲单列索引(普通索引,唯一索引,主键索引)、组合索引、全文索引、空间索引、
mysql索引类型:
主键索引 primary key 不允许null
唯一索引 union key 可以为null
普通索引 index
联合索引
全文索引
建立索引的原则:
最左匹配原则 遇到范围查询(>、
尽量选择区分度高的列作为索引
=和in可以乱序
索引列不能参与计算,保持列“干净”。 假如索引列参与计算的话,那每次检索时,都会先将索引计算一次,再做比较,显然成本太大。
尽量的扩展索引,不要新建索引
补充:尽量扩展索引、不要新建索引 mysql目前主要索引有:FULLTEXT,HASH,BTREE 好的索引可以提高我们的查询效率,不好的索引不但不会起作用,反而给DB带来负担,基于BTREE结构,插入、修改都会重新调整索引结构,存储成本增加,写效率降低,同时DB系统也要消耗资源去维护。 基于刚才的最左匹配原则,尽量在原有基础上扩展索引,不要新增索引。 能用单索引,不用联合索引;能用窄索引,不用宽索引;能复用索引,不新建索引。 回到线上案例: nc_tms_order、ct_order看看分别有哪些索引
索引的不足:空间,时间,开销
常用优化总结:
有索引但未被用到的情况(不建议) (1) Like的参数以通配符%开头时 (2) where条件不符合最左前缀原则时 (3) 使用!= 或 <> 操作符时(使用>或
避免select * 在解析的过程中,会将'*' 依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间。
order by 语句优化 1)重写order by语句以使用索引;2)为所使用的列建立另外一个索引 3)避免在order by子句中使用表达式
提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉
使用 varchar/nvarchar 代替 char/nchar
在Join表的时候使用相当类型的例,并将其索引
优化嵌套查询:子查询可以被更有效率的连接(Join)替代;
很多时候用 exists 代替 in 是一个好的选择
mysql索引的分类
理解mysql搜索引的实现:
MyISAM索引实现:
MyISAM中索引检索的算法为首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据记录。
MyISAM的索引方式也叫做“非聚集”的,之所以这么称呼是为了与InnoDB的聚集索引区分。
在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。
InnoDB索引实现:
MyISAM索引和InnoDB索引的不同:
第一个重大区别是InnoDB的数据文件本身就是索引文件。innodb 聚集索引data域存放的是数据的记录,mylsam的data域存储的是记录的地址
从上文知道,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。
这种索引叫做聚集索引。因为InnoDB的数据文件本身要按主键聚集,所以InnoDB要求表必须有主键(MyISAM可以没有),如果没有显式指定,则MySQL系统会自动选择一个可以唯一标识数据记录的列作为主键,如果不存在这种列,则MySQL自动为InnoDB表生成一个隐含字段作为主键,这个字段长度为6个字节,类型为长整形。
第二个与MyISAM索引的不同是InnoDB的辅助索引data域存储相应记录主键的值而不是地址。换句话说,InnoDB的所有辅助索引都引用主键作为data域。mylsam辅助索引data域存储的是地址。
exists和in的区别?
mysql myclre_mysql 索引及查询优化总结相关推荐
- mysql中groupby会用到索引吗_开发人员不得不知的MySQL索引和查询优化
本文主要总结了工作中一些常用的操作及不合理的操作,在对慢查询进行优化时收集的一些有用的资料和信息,本文适合有 MySQL 基础的开发人员. 索引相关 索引基数 基数是数据列所包含的不同值的数量,例如, ...
- mysql六:索引原理与慢查询优化
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...
- mysql聚合索引创建_为 MySQL 查询优化选择最佳索引
我们的许多用户.开发者和数据库管理员不断向我们的团队咨询有关 EverSQL 的索引推荐算法.所以,我们决定写一些这方面的内容. 本教程不会详细介绍该算法的所有内部特性,而是要简单地说明索引最重要的方 ...
- mysql之索引原理与慢查询优化
一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语 ...
- MySQL索引与查询优化
目录 About MySQL Why MySQL MySQL Index Why Index 索引是如何工作的 如何使用 创建索引 查看索引 删除索引 索引的使用原则 写操作比较频繁的列慎重加索引 索 ...
- mysql+索引优化+查询优化+存储优化_mysql利用覆盖索引避免回表优化查询
前言 说到覆盖索引之前,先要了解它的数据结构:B+树. 先建个表演示(为了简单,id按顺序建): id name 1 aa 3 kl 5 op 8 aa 10 kk 11 kl 14 jk 16 ml ...
- MySQL - 践行索引优化
文章目录 生猛干货 Pre Table Demo DB Version Case 全值匹配 最左前缀 禁止索引列上做任何操作(计算.函数.(自动or手动)类型转换) 存储引擎不能使用索引中范围条件右边 ...
- MySQL的索引及优化方案
目录 索引的概念 索引的分类 索引的机制 索引的优缺点 在哪些表上适合使用索引 索引的使用 索引使用注意事项 各个索引区别 索引优化策略 索引的概念 通过给字段添加索引可以提高数据的读取速度,提高项目 ...
- MySQL设计索引的原则
1. 搜索的索引列,不一定是所要选择的列. 换句话说,最适合索引的列是出现在 WHERE 子句中的列,或连接子句中指定的列,而不是出现在 SELECT 关键字后的选择列表中的列 . 2. 使用惟一索引 ...
最新文章
- 读书笔记-我所理解的生活
- linux下数据库的基本管理,数据库的管理_linux 运维之道 基础篇的技术博客_51CTO博客...
- android studio wcf,将图像从android studio上传到Wcf Service
- 并发编程-15并发容器(J.U.C)核心 AbstractQueuedSynchronizer 抽象队列同步器AQS介绍
- 国产嵌入式操作系统发展思考
- Java高级开发必会的50个性能优化的细节(珍藏版)
- C++中的inline用法
- [转]CSS浏览器兼容问题总结
- Java 多态 ——一个案例 彻底搞懂它
- 计算机视觉目标检测算法总结4——其他SSD系列算法
- 深入理解Android壁纸
- 解决visual studio安装Dev后不显示控件或控件灰色不可用
- php 中国地图编辑,科学网—如何正确绘制中国示意性地图?编辑给您提建议 - 科学出版社的博文...
- 论文中的 w.r.t. 和 i.e. 是什么意思
- 苹果apple通过双重认证帐户恢复获取AppID访问权限
- Vue项目对接微信公众号踩坑日记
- android从入门到精通-项目实战(心得及源码)
- Mysql数据库---约束类型_MySQL约束类型及举例介绍
- python之xlrd
- 用CSS3制作太阳系行星运动简图
热门文章
- 【BUAAOO】第四次博客作业
- Java-杂项:Java数组Array和集合List、Set、Map
- [LeetCode] 159. Longest Substring with At Most Two Distinct Characters 最多有两个不同字符的最长子串...
- 51nod 1489 蜥蜴和地下室
- 清除定时器 和 vue 中遇到的定时器setTimeout setInterval问题
- 禁用select下拉方法
- With(ReadPast)就不会被阻塞吗?
- 导入新项目报错 Hibernate提示:No generator named ID_GENERATOR is defined in the persistence unit
- Sasha and a Very Easy Test CodeForces - 1109E (数学,线段树)
- python网络数据采集(伴奏曲)