mysql创建索引

Mysql 二级索引回表知识点:顺序I/O & 随机I/O

浪尽此生 提交于 2020-02-02 15:27:42
一、准备工作 1.1 创建一张数据表 CREATE TABLE ` student ` ( ` id ` bigint ( 20 ) NOT NULL COMMENT 'ID' , ` name ` varchar ( 64 ) DEFAULT NULL COMMENT '姓名' , ` age ` int ( 3 ) DEFAULT NULL COMMENT '年龄' , ` birth ` timestamp NULL DEFAULT NULL COMMENT '出生日期' , PRIMARY KEY ( ` id ` ) , KEY ` idx_name ` ( ` name ` ) USING BTREE ) ENGINE = InnoDB DEFAULT CHARSET = utf8 ; 在创建 student 表的同时创建了二级索引 idx_name ( name ) 1.2 准备测试数据 创建三条二级索引回表测试数据 二、顺序I/O & 随机I/O 执行 SQL 语句如下: select * from student where name > '马百万' and name < '马百万3' 毫无疑问,展示出的记录是为 name = 马百万2 的记录。但是在查询的这个过程中存储数据底层发生了 顺序I/O & 随机I/O 两步操作 三、总结 name

MySQL 使用B+树

半腔热情 提交于 2020-02-02 13:31:25
概述 首先需要澄清的一点是,MySQL 跟 B+ 树没有直接的关系,真正与 B+ 树有关系的是 MySQL 的默认存储引擎 InnoDB,MySQL 中存储引擎的主要作用是负责数据的存储和提取,除了 InnoDB 之外,MySQL 中也支持 MyISAM 作为表的底层存储引擎。 我们在使用 SQL 语句创建表时就可以为当前表指定使用的存储引擎,你能在 MySQL 的文档 Alternative Storage Engines 中找到它支持的全部存储引擎,例如: MyISAM 、 CSV 、 MEMORY 等,然而默认情况下,使用如下所示的 SQL 语句来创建表就会得到 InnoDB 存储引擎支撑的表: CREATE TABLE t1 ( a INT, b CHAR (20), PRIMARY KEY (a)) ENGINE=InnoDB; 想要详细了解 MySQL 默认存储引擎的读者,可以通过之前的文章 『浅入浅出』MySQL 和 InnoDB 了解包括 InnoDB 存储方式、索引和锁等内容,我们在这里主要不会介绍 InnoDB 相关的过多内容。 我们今天最终将要分析的问题其实还是,为什么 MySQL 默认的存储引擎 InnoDB 会使用 MySQL 来存储数据,相信对 MySQL 稍微有些了解的人都知道,无论是表中的数据(主键索引)还是辅助索引最终都会使用 B+ 树来存储数据

MySQL数据库索引——(八)

半世苍凉 提交于 2020-02-02 11:22:30
MySQL数据库索引——(八) 9.1数据库索引 MySQL官方对索引定义为: 索引(index)是帮助MySQL高效获取数据的数据结构 ,提取句子主干,就可以得到索引的本质:索引是数据结构。 9.2索引的分类 主键索引 (Primary Key) 唯一索引 (Unique) 常规索引 (KEY/Index) 全文索引 (FullText) I.主键索引 (Primary Key) 作用:一张表中能唯一标识一条记录的一个列 特点: 唯一的标识,不可重复,只能有一个列作为主键 能够确保数据记录的唯一性 能记录数据在数据库中的位置 ii.唯一索引 (Unique) 作用:避免同一张表重复的列出现,唯一索引可以重复,多个列都可以有标识位(唯一索引) iii.常规索引 (KEY/Index) 作用:快速定位需要拿到的数据(默认的) IV.全文索引 (FullText) 作用:快速定位数据 注意:在特定的数据库引擎下才有,例如MySAM类型的数据表,且只能用于CHAR , VARCHAR , TEXT数据列类型,适用于大型数据集 9.4索引的使用 ! [ explain2 ] ( F:\图片库\explain2 . PNG ) ! [ explain2 ] ( F:\图片库\explain2 . PNG ) -- 索引的使用 -- 1.在创建表的时候给字段增加suoyin CREATE

MySQL

a 夏天 提交于 2020-02-02 09:30:47
一、索引 B+ Tree 原理 MySQL 索引 索引优化 索引的优点 索引的使用条件 二、查询性能优化 使用 Explain 进行分析 优化数据访问 重构查询方式 三、存储引擎 InnoDB MyISAM 比较 四、数据类型 整型 浮点数 字符串 时间和日期 五、切分 水平切分 垂直切分 Sharding 策略 Sharding 存在的问题 六、复制 主从复制 读写分离 参考资料 一、索引 B+ Tree 原理 1. 数据结构 B Tree 指的是 Balance Tree,也就是平衡树。平衡树是一颗查找树,并且所有叶子节点位于同一层。 B+ Tree 是基于 B Tree 和叶子节点顺序访问指针进行实现,它具有 B Tree 的平衡性,并且通过顺序访问指针来提高区间查询的性能。 在 B+ Tree 中,一个节点中的 key 从左到右非递减排列,如果某个指针的左右相邻 key 分别是 key i 和 key i+1 ,且不为 null,则该指针指向节点的所有 key 大于等于 key i 且小于等于 key i+1 。 2. 操作 进行查找操作时,首先在根节点进行二分查找,找到一个 key 所在的指针,然后递归地在指针所指向的节点进行查找。直到查找到叶子节点,然后在叶子节点上进行二分查找,找出 key 所对应的 data。 插入删除操作会破坏平衡树的平衡性,因此在插入删除操作之后

索引与优化

≡放荡痞女 提交于 2020-02-02 02:02:19
参考: http://blog.csdn.net/xluren/article/details/32746183 http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。对于没有索引的表,单表查询可能几十万数据就是瓶颈,而通常大型网站单日就可能会产生几十万甚至几百万的数据,没有索引查询会变的非常缓慢。还是以WordPress来说,其多个数据表都会对经常被查询的字段添加索引,比如wp_comments表中针对5个字段设计了BTREE索引。 一个简单的对比测试 以我去年测试的数据作为一个简单示例,20多条数据源随机生成200万条数据,平均每条数据源都重复大概10万次,表结构比较简单,仅包含一个自增ID,一个char类型,一个text类型和一个int类型,单表2G大小,使用MyIASM引擎。开始测试未添加任何索引。 执行下面的SQL语句: 1 mysql> SELECT id,FROM_UNIXTIME( time ) FROM article WHERE a.title= '测试标题' 查询需要的时间非常恐怖的,如果加上联合查询和其他一些约束条件,数据库会疯狂的消耗内存

MySQL高级——索引 (内附索引高频面试题)

三世轮回 提交于 2020-02-01 23:24:27
目录 一、索引介绍以及使用 1.1 什么是索引? 1.2 索引的分类? 1.3 索引的创建、查询、删除 的方式? 二、高频面试题(通过面试题更能了解索引) 2.1 什么是索引? 2.2 MySQL索引是什么样的数据结构? 2.3 MySQL中的常用的存储引擎 MyISAM与InnoDB的区别? 2.4 如何选择存储引擎 MyISAM与InnoDB? 2.5 MyISAM与InnoDB实现BTree索引的方式不同在哪? 2.6 为什么要使用索引?(索引的优点?) 2.7 索引是怎么提高查询速度的? 2.8 既然索引这么多好处,为什么不给表中的每一列都创建索引?(索引的缺点?) 2.9 使用索引有哪些注意事项?(使用索引时,SQL语句怎么优化?) 2.10 什么是最左前缀原则? 2.11 什么是覆盖索引? 一、索引介绍以及使用 1.1 什么是索引? MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。 从官方定义中,我们可以知道索引本质是一种数据结构。 详细一点的解释就是: 数据库除了数据本身之外,数据库还维护着一个满足特定查找算法的数据结构,这些数据结构通过某种方式指向数据。如此一来,就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是 索引。 简单一点的解释就是: 索引是排好序的可快速查找的数据结构。 形象一点的解释就是:

MySQL日常使用笔记

╄→尐↘猪︶ㄣ 提交于 2020-02-01 11:03:03
逍遥山人的MySQL使用笔记,持续更新中 表结构 新建表以及添加表和字段的注释 create table t_user( ID INT(11) primary key auto_increment comment '主键', NAME VARCHAR(255) comment '姓名', CREATE_TIME date comment '创建时间' )comment = '用户信息表'; 修改字段类型 alter table tablename modify column column_name varchar(30); 查看表结构 查看表的字段、字段类型、索引等 DESC tablename; 或 SHOW COLUMNS FROM tablename; 或包含字符集、字段注释等 SHOW FULL FIELDS from table_name; 查看表生成的DDL 注意表名不加单引号 show create table 表名; 查看分区表的分区情况 SELECT partition_name part, partition_expression expr, partition_description descr, table_rows FROM information_schema.PARTITIONS WHERE table_schema = SCHEMA() AND

如何书写高效的MySQL查询?

纵饮孤独 提交于 2020-02-01 10:22:20
How to write efficient MySQL query statements WHERE子句中的书写注意事项 模糊查询(like)时需要注意的事项 索引 字段类型 表连接时的注意事项 其他注意事项 WHERE 子句中的书写注意事项 首先应考虑在 where 及 order by 涉及的列上建立索引。 下列操作会导致引擎放弃使用索引而进行全表扫描,是应尽量避免的。 1).在 where 子句中使用 != 或 <> 操作符 2).在 where 子句中对字段进行 null 值判断 如: select id from t where num is null; 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0; 3).在 where 子句中使用 or 来连接条件 如: select id from t where num=10 or num=20; 可以这样查询: select id from t where num=10 union all select id from t where num=20; 4).in 和 not in 也要慎用 如: select id from t where num in(1,2,3); 对于连续的数值,能用 between 就不要用 in 如:

[Mysql] 索引详解

此生再无相见时 提交于 2020-02-01 10:05:09
前言: 今天在这里总结一下Mysql索引,也给自己加个印象。 我的座右铭:即使记性再差,仍要坚持多读多看。 概念 Mysql索引的建立对于Mysql的高效运行是很重要的,索引可以大大提高Mysql的检索速度。 Mysql目前主要有以下5中索引类型: 普通索引 唯一索引 主键索引 组合索引 全文索引 缺点: 索引也有它的缺点,过多的滥用索引,也会降低更新表的速度。如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。建立索引会占用磁盘空间的索引文件。 5种索引类型 普通索引 这是最基本的索引,他没有任何限制。可以用如下方式创建: 直接创建索引 create index index_name on table ( column ( length ) ) 修改表结构的方式添加索引: alter table table_name add index index_name on ( column ( length ) ) 创建表的时候同时创建索引 CREATE TABLE ` table ` ( ` id ` int ( 11 ) NOT NULL AUTO_INCREMENT , ` title ` char ( 255 ) CHARACTER NOT NULL , ` content ` text CHARACTER NULL

MySQL存储引擎

ぐ巨炮叔叔 提交于 2020-01-31 04:45:50
MySQL存储引擎 存储引擎 MySQL存储引擎 存储引擎   MySQL数据库在实际的工作中分为了语句分析层和存储引擎层,其中语句分析层主要负责与客户端完成连接并且事先分析出SQL语句的内容和功能,存储引擎层则主要负责接收来自语句分析层的分析结果,完成相应的数据输入输出和文件操作,即如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。 MySQL存储引擎 (1)MyISAM存储引擎   不支持事务、也不支持外键,优势是访问速度快,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本上可以用这个引擎来创建表。支持3种不同的存储格式,分别是:静态表、动态表、压缩表 静态表:表中的字段都是非变长字段,每个记录都是固定长度的,优点存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多(因为存储时会按照列的宽度定义补足空格) 动态表:记录不是固定长度的,这样存储的优点是占用的空间相对较少;缺点:频繁的更新、删除数据容易产生碎片,需要定期执行OPTIMIZE TABLE或者myisamchk -r命令来改善性能 压缩表:因为每个记录是被单独压缩的,所以只有非常小的访问开支 (2)InnoDB存储引擎   该存储引擎提供了具有提交