mysql创建索引

MySQL进阶:(三) InnoDB索引模型

孤街醉人 提交于 2019-11-29 01:53:13
目录 前言: 1.InnoDB索引模型 2 索引分类 是否具有主键约束:主键索引与二级索引 是否具有唯一约束:唯一索引和普通索引 索引字段数量:联合索引和单列索引 2 索引维护 索引重建操作 非主键索引 主键索引 索引重建流程 前言: 接上一篇 MySQL进阶:(二) 日志模块 ,索引是在存储引擎层实现的,索引在MySQL不同存储引擎中的实现是不同的,本篇介绍的是InnoDB的索引; 1.InnoDB索引模型 使用InnoDB存储引擎创建的表又叫做索引组织表,因为表中每一条记录(数据行)的物理顺序都是按照主键顺序 使用InnoDB引擎建立的表又称索引组织表,因为表中记录的物理顺序都与主键索引树的主键顺序保持一致,而具备该特点的主键索引又被称作聚集(聚簇)索引; 同一张表中每一个索引都对应着一棵B+树,当使用某个索引时,会先在该索引树上检索,因为索引项是有序的,所以可以直接利用二分查找快速定位叶子结点的位置;当没有使用任何索引时,比如select * from T会在主键索引树上全扫描。注意,按照SQL的执行顺序,即使添加上limit 1也无法避免全扫描; 2 索引分类 不同类型的索引的使用机制和使用场景都是不同的,这里先看下索引的分类; 是否具有主键约束:主键索引与二级索引 顾名思义,具备主键约束的索引是主键索引,主键索引以外的索引是二级索引;为了方面理解

MySQL之存储引擎

不想你离开。 提交于 2019-11-29 01:44:00
MySQL之存储引擎 1.MySQL存储引擎介绍 MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。 例如,如果你在研究大量的临时数据,你也许需要使用内存存储引擎。内存存储引擎能够在内存中存储所有的表格数据。又或者,你也许需要一个支持事务处理的数据库(以确保事务处理不成功时数据的回退能力)。 这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。 MySQL默认配置了许多不同的存储引擎,可以预先设置或者在MySQL服务器中启用。你可以选择适用于服务器、数据库和表格的存储引擎,以便在选择如何存储你的信息、如何检索这些信息以及你需要你的数据结合什么性能和功能的时候为你提供最大的灵活性。 选择如何存储和检索你的数据的这种灵活性是MySQL为什么如此受欢迎的主要原因。其它数据库系统(包括大多数商业选择)仅支持一种类型的数据存储。 遗憾的是,其它类型的数据库解决方案采取的“一个尺码满足一切需求”的方式意味着你要么就牺牲一些性能,要么你就用几个小时甚至几天的时间详细调整你的数据库。使用MySQL,我们仅需要修改我们使用的存储引擎就可以了 2.MySQL结构 MySQL架构总共四层

【MySQL】MYSQL中EXPLAIN的说明

梦想的初衷 提交于 2019-11-29 01:42:58
mysql> explain select count(id) from t_prehandle_zhigao_05 as zhigao where start_time > '2008-05-30'; +----+-------------+--------+-------+---------------+------------+---------+------+---------+--------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+--------+-------+---------------+------------+---------+------+---------+--------------------------+ | 1 | SIMPLE | zhigao | range | start_time | start_time | 8 | NULL | 1061762 | Using where; Using index | +----+-------------+--------+-------+---------------+--------

mysql explain 解释

故事扮演 提交于 2019-11-29 01:42:47
EXPLAIN列的解释: table:显示这一行的数据是关于哪张表的 type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句 key: 实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引 key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好 ref:显示索引的哪一列被使用了,如果可能的话,是一个常数 rows:MYSQL认为必须检查的用来返回请求数据的行数 Extra:关于MYSQL如何解析查询的额外信息。将在表4.3中讨论,但这里可以看到的坏的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢 extra列返回的描述的意义 Distinct:一旦MYSQL找到了与行相联合匹配的行,就不再搜索了 Not exists: MYSQL优化了LEFT JOIN

MySQL Index详解

坚强是说给别人听的谎言 提交于 2019-11-29 01:42:31
①MySQL Index 一、SHOW INDEX会返回以下字段 1、Table 表的名称。 2、 Non_unique 如果索引不能包括重复词,则为0,如果可以则为1。 3、 Key_name 索引的名称 4、 Seq_in_index 索引中的列序列号,从1开始。 5、 Column_name 列名称。 6、 Collation 列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)。 7、Cardinality 索引中唯一值的数目的估计值。通过运行ANALYZE TABLE或myisamchk -a可以更新。基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机会就越大。 8、Sub_part 如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。 9、 Packed 指示关键字如何被压缩。如果没有被压缩,则为NULL。 10、 Null 如果列含有NULL,则含有YES。如果没有,则该列含有NO。 11、 Index_type 用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。 12、 Comment 多种评注,您可以使用db_name.tbl_name作为tbl_name FROM db

索引

China☆狼群 提交于 2019-11-29 00:51:50
一、索引的介绍 数据库中专门用于帮助用户快速查找数据的一种数据结构。类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置吗,然后直接获取。 二 、索引的作用 约束和加速查找 三、常见的几种索引: - 普通索引 - 唯一索引 - 主键索引 - 联合索引(多列) - 联合主键索引   - 联合唯一索引    - 联合普通索引 无索引: 从前往后一条一条查询 有索引:创建索引的本质,就是创建额外的文件(某种格式存储,查询的时候,先去格外的文件找,定好位置,然后再去原始表中直接查询。但是创建索引越多,会对硬盘也是有损耗。 建立索引的目的: a.额外的文件保存特殊的数据结构 b.查询快,但是插入更新删除依然慢 c.创建索引之后,必须命中索引才能有效索引的种类 hash索引和BTree索引 (1)hash类型的索引:查询单条快,范围查询慢 (2)btree类型的索引:b+树,层数越多,数据量指数级增长(我们就用它,因为innodb默认支持它) 普通索引 create index 索引的名字 on 表名(列名)删除索引 drop index 索引的名字 on 表名查看索引 show index from 表名 3.2 唯一索引 唯一索引有两个功能:加速查找和唯一约束(可含null) 创建表+主键索引 create table userinfo( id int not null

MySQL数据库设计规范

时光毁灭记忆、已成空白 提交于 2019-11-29 00:31:42
MySQL数据库设计规范 目录 1. 规范背景与目的 2. 设计规范 2.1 数据库设计 2.1.1 库名 2.1.2 表结构 2.1.3 列数据类型优化 2.1.4 索引设计 2.1.5 分库分表、分区表 2.1.6 字符集 2.1.7 程序DAO层设计建议 2.1.8 一个规范的建表语句示例 2.2 SQL编写 2.2.1 DML语句 2.2.2 多表连接 2.2.3 事务 2.2.4 排序和分组 2.2.5 线上禁止使用的SQL语句 1. 规范背景与目的 MySQL数据库与 Oracle、 SQL Server 等数据库相比,有其内核上的优势与劣势。我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短。本规范旨在帮助或指导RD、QA、OP等技术人员做出适合线上业务的数据库设计。在数据库变更和处理流程、数据库表设计、SQL编写等方面予以规范,从而为公司业务系统稳定、健康地运行提供保障。 2. 设计规范 2.1 数据库设计 以下所有规范会按照【高危】、【强制】、【建议】三个级别进行标注,遵守优先级从高到低。 对于不满足【高危】和【强制】两个级别的设计,DBA会强制打回要求修改。 2.1.1 库名 【强制】库的名称必须控制在32个字符以内,相关模块的表名与表名之间尽量提现join的关系,如user表和user_login表。 【强制】库的名称格式:业务系统名称_子系统名

mysql补充

落花浮王杯 提交于 2019-11-29 00:31:35
mysql补充 mysql使用流程 开启服务端,mysqld或者net start mysql cmd下键入mysql -u root -p,输入设置好的密码,连接mysql客户端 show databases;展示所有的mysql仓库 创建一个库:create database CRM;然后show databases; 切换数据库使用use + 库名,例如:use crm; 在切换仓库下创建一张表,命令:create table student(id int,name char(10),age int); 再执行show tables;就可以看到有了一个student表 查看一下这个表里的数据select * from student; 接下来正常执行表的增删查改操作即可 mysql目录介绍 总结:其实这些库就是我们电脑上对应的文件夹,在mysql中显示为对应的库,来方便我们管理数据,而文件或者文件夹这种与硬盘打交道的事情就交给mysql了,我们只需要对mysql库中的数据进行操作就可以了 指令补充 show variables like "%char%"; # 查看字符集编码指令 mysql -h 127.0.0.1 -P 3306 -u root -p # MySQL客户端连接服务端时的完整指令 show variables like "storage_engine%";

mysql性能优化

别说谁变了你拦得住时间么 提交于 2019-11-29 00:28:00
1、索引的实现 2、mysql体系结构 连接池、 服务和工具层、 sqlInterface、 parser、 optimizer、 caches indexes: pluggable storage engines 存储引擎:MyISAM InnoDB federated archive merge memory cluster example file system logs and files binary ,redo ,undo 3、索引的定义 为了加速对表中数据的检索而创建的一种分散存储的数据结构。 索引 —— 表数据(磁盘地址 数据) 4、使用索引的好处 索引能极大的减少存储引擎需要扫描的数据量; 可以将随机IO编程顺序IO 索引可以在我们进行分组、排序等操作时,避免使用临时表 5、数据结构为什么使用B+Tree? 树的概览 1、二叉树查找 Binary Tree Search 2、平衡二叉树 Balanced binary search tree 相对平衡的树 缺点:·太深 了:数据处的深度决定了索引的IO操作,IO操作耗时大    太小了:每一个磁盘块(节点/页)保存的数据量太小了,没有很好 的利用操作磁盘IO的数据交换特性,也没有很利用好磁盘IO的预读能力(空间局部性原理),从而带来频繁的IO操作 3、多路平衡二叉树B-tree 绝对平衡树 4、加强版多路平衡查找树

mysql储存引擎

浪尽此生 提交于 2019-11-28 23:56:45
1.储存引擎解释 首先确定一点,存储引擎的概念是MySQL里面才有的,不是所有的关系型数据库都有存储引擎这个概念,后面我们还会说,但是现在要确定这一点。     在讲清楚什么是存储引擎之前,我们先来个比喻,我们都知道录制一个视频文件,可以转换成不同的格式,例如mp4,avi,wmv等,而存在我们电脑的磁盘上也会存在于不同类型的文件系统中如windows里常见的ntfs、fat32,存在于linux里常见的ext3,ext4,xfs,但是,给我们或者用户看懂实际视频内容都是一样的。直观区别是,占用系统的空间大小与清晰程度可能不一样。 那么数据库表里的数据存储在数据库里及磁盘上和上述的视频格式及存储磁盘文件的系统格式特征类似,也有很多种存储方式。   但是对于用户和应用程序来说同样一张表的数据,无论用什么引擎来存储,用户能够看到的数据是一样的。不同储引擎存取,引擎功能,占用空间大小,读取性能等可能有区别。说白了,存储引擎就是在如何存储数据、提取数据、更新数据等技术方法的实现上,底层的实现方式不同,那么就会呈现出不同存储引擎有着一些自己独有的特点和功能,对应着不同的存取机制。   因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即:对表的存储、操作等的实现方法不同),表是什么,表本质上就是磁盘上的文件。   其实MySQL支持多种存储引擎