mysql创建索引

MySQL存储引擎介绍

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

聚集索引与非聚集索引的总结

↘锁芯ラ 提交于 2019-11-28 22:17:45
一.索引简介 众所周知,索引是关系型数据库中给数据库表中一列或多列的值排序后的存储结构,SQL的主流索引结构有B+树以及Hash结构,聚集索引以及非聚集索引用的是B+树索引。这篇文章会总结SQL Server以及MySQL的InnoDB和MyISAM两种SQL的索引。 SQL Sever索引类型有:唯一索引,主键索引,聚集索引,非聚集索引。 MySQL 索引类型有:唯一索引,主键(聚集)索引,非聚集索引,全文索引。 二.聚集索引 聚集(clustered)索引,也叫聚簇索引。 定义:数据行的物理顺序与列值(一般是主键的那一列)的逻辑顺序相同,一个表中只能拥有一个聚集索引。 单单从定义来看是不是显得有点抽象,打个比方,一个表就像是我们以前用的新华字典,聚集索引就像是拼音目录,而每个字存放的页码就是我们的数据物理地址,我们如果要查询一个“哇”字,我们只需要查询“哇”字对应在新华字典拼音目录对应的页码,就可以查询到对应的“哇”字所在的位置,而拼音目录对应的A-Z的字顺序,和新华字典实际存储的字的顺序A-Z也是一样的,如果我们中文新出了一个字,拼音开头第一个是B,那么他插入的时候也要按照拼音目录顺序插入到A字的后面,现在用一个简单的示意图来大概说明一下在数据库中的样子: 地址 id username score 0x01 1 小明 90 0x02 2 小红 80 0x03 3 小华 92

Mysql优化-索引

假如想象 提交于 2019-11-28 21:49:01
1. 索引的本质   MySQL官方对索引的定义为:索引是帮助MySQL高效获取数据的数据结构。   数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度尽可能的快,因此 数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法是顺序查找(liner search),这种复杂度为o(n)的算法在数据量大时,速度很慢。但是我们有更优秀的查找算法,例如二分查找(binary search)、二叉树查找(binary tree search)等。如果稍微分析一下会发现,每种查找算法都只能用于特定的数据结构之上,例如二分查找要求被检索数据有序,而二叉查找只能应用于二叉查找树上,但是数据本身的组织结构不可能满足各种数据结构(例如,一般不可能同时将两列都按顺序进行组织),所以在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实训高级查找算法。这种数据结构,就是索引。   为了加快查询速度,可以维护一个二叉查找树,每个节点分别包含索引键值和一个指向对应数据记录物理地址的指针,这样就可以运用二叉查找在o(logN)的复杂度内获取到相应数据。   虽然这是一个货真价实的索引,但是实际的数据库系统几乎没有使用二叉查找树实现的。。。 二叉排序树   二叉排序树的排序规则如下:   1)若左子树不空

MySQL重要知识点/面试题总结

≯℡__Kan透↙ 提交于 2019-11-28 20:05:37
这篇文章是作者利用几天时间对MySQL知识点总结完善后的产物,可以用来回顾MySQL基础知识以及备战MySQL常见面试问题。 什么是MySQL? MySQL 是一种关系型数据库,在Java企业级开发中非常常用,因为 MySQL 是开源免费的,并且方便扩展。阿里巴巴数据库系统也大量用到了 MySQL,因此它的稳定性是有保障的。MySQL是开放源代码的,因此任何人都可以在 GPL(General Public License) 的许可下下载并根据个性化的需要对其进行修改。MySQL的默认端口号是3306。 事务相关 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行。 事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行系统崩溃,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。 事物的四大特性(ACID)介绍一下? 原子性 : 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用; 一致性 : 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的; 隔离性 : 并发访问数据库时,一个用户的事务不被其他事务所干扰

索引面试问题

江枫思渺然 提交于 2019-11-28 19:55:10
1)什么是索引? 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,索引就相当于目录。当你在用新华字典时,帮你把目录撕掉了,你查询某个字开头的成语只能从第一页翻到第一千页。累!把目录还给你,则能快速定位! 2)索引的优缺点: 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。,且通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。但是,索引也是有缺点的:索引需要额外的维护成本;因为索引文件是单独存在的文件,对数据的增加,修改,删除,都会产生额外的对索引文件的操作,这些操作需要消耗额外的IO,会降低增/改/删的执行效率。 MySQL的索引有哪些类型? MySQL目前主要有以下几种索引类型: 普通索引    是最基本的索引,它没有任何限制. 唯一索引   与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一. 主键索引   是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。 组合索引   指多个字段上创建的索引,只有在查询条件中使用了创建一个字段,索引才会被使用。使用组合索引时遵循最左前缀。 全文索引   主要用来查找文本中的关键字,而不是直接与索引中的值相比较.fulltext索引跟其它索引大不相同,它更像是一个搜索引擎

MySQL优化

懵懂的女人 提交于 2019-11-28 19:20:55
MySQL优化 增加冗余字段,空间换时间 varchar(10)和varchar(255) 都存储相同的数据,连表查询时,varchar(255)更占内存 字段避免存null,不走索引 索引类型 Btree 索引 - 表的索引会生成一个单独的数据结构,类似于二叉树结构存储,每个节点存储key(索引)和指向数据的地址(真正表中的数据地址) - btree索引常见误区:把where后常用列都加上索引,如果where id =1 and age > 20,其实最终查询只会用到一个索引,mysql的独立索引同时只能用到一个。 - 建议建立多列联合索引,但是要注意,联合索引要满足左前缀原则 注:group by ,order by 也要遵循左前缀原则 - 可以提高排序速度,因为索引树本来就是有顺序,根据顺序从表中以此取出 - 可以提高分组速度,要分组必须先排序 hash 索引 每条数据有对应的hash,查询单一数据效率高,但是查询范围效率低,无法利用前缀索引,每次查询都必须回行,索引树只查询数据位置 索引类型 聚簇索引 innodb 主键索引和行数据一起存放,找到索引就找到数据,不需要回行, 主键索引和数据存放在一起,如果通过主键索引查找,找到索引就等于找到数据,如果通过其他索引,二级索引或者次索引,会找到对主键索引的引用,然后获取数据 默认主键索引 没有主键,用Unique key 做主键

WEB 13.MySQL

谁都会走 提交于 2019-11-28 18:45:39
MySQL 数据备份 权限管理 修改密码 如果忘记密码怎么办 创建用户 给用户授权允许远程连接 索引 优缺点: 索引分类: 添加索引: 查看索引: 删除索引: 视图 定义: 特点: 触发器: 事物的基本操作: 数据备份 先退出mysql环境 数据的导出 备份表: 格式:mysqldump -uroot -p 库名 表名>表名.sql 备份库: 格式: mysqldump -uroot -p 库名>备份文件名.sql 数据的导入 数据的导入: Mysql -uroot -p 库名 < 备份文件地址.sql 权限管理 用户:链接的账户 权限:语序用户操作的范围 组:权限的集合 修改密码 Mysql 有一个默认的mysql库 有一个user表,这个表中存放的就是咱们用户信息 切换到mysql库中,执行 update user set authentication_string=password(‘123456’) where User=’root’ and host=’localhost’; 重新启动服务 net stop mysql net start mysql 然后在去连接数据库 此时会发现不输入密码连接会失败,使用密码登录就ok了 如果忘记密码怎么办 修改配置文件my.cnf 在mysqld最后一行添加 skip-grant-tables 跳过权限验证 重启服务

MySQL 索引

六月ゝ 毕业季﹏ 提交于 2019-11-28 18:22:58
简介 索引(也叫做键key)是存储引擎用于快速找到记录的一种数据结构; 索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时; 索引优化应该是对查询性能优化最有效的手段了,索引能够轻易将查询性能提高几个数量级; 索引的优点 索引大大减少了服务器需要扫描的数据量:即让服务器快速定位到表的指定位置,而不需要全表扫描; 索引可以帮助服务器避免排序和临时表:如常见的B-Tree索引,是按照顺序存储数据的,可以做order by和group by操作等; 索引可以将随机I/O变为顺序I/O:因为索引中存储了实际的列值,故某些查询只使用索引就能够完成全部查询; 索引类型 B-Tree索引 : 最常见的一种索引类型,所有的值都是按顺序存储的,且每一个叶子页到根的距离相同; B-Tree索引能够加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取需要的数据,取而代之的是从索引的根节点开始进行搜索; 根节点的槽中存放了指向子节点的指针,存储引擎根据这些指针向下层查找; 通过比较节点页的值和要查找的值可以找到合适的指针进入下层子节点,这些指针实际上定义了子节点页中值的上限和下限; 最终存储引擎要么找到对应的值,要么该记录不存在; B-Tree索引适用于:全键值、键值范围或键前缀查找; B-Tree索引的抽象表示如下: B-Tree索引的数据分布如下: 哈希索引 基于哈希表实现

MySQL 索引

最后都变了- 提交于 2019-11-28 18:22:42
[1]索引不是万能的! 索引可以加快数据检索操作,但会使数据修改操作变慢。每修改数据记录,索引就必须刷新一次。为了在某种程序上弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE项。这个选项的作用是暂时制止MySQL在该命令每插入一条新记录和每修改一条现有之后立刻对索引进行刷新,对索引的刷新将等到全部记录插入/修改完毕之后再进行。在需要把许多新记录插入某个数据表的场合,DELAY_KEY_WRITE选项的作用将非常明显。 [2]另外,索引还会在硬盘上占用相当大的空间。 因此应该只为最经常查询和最经常排序的数据列建立索引。注意,如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。 从理论上讲,完全可以为数据表里的每个字段分别建一个索引,但MySQL把同一个数据表里的索引总数限制为16个。 1. InnoDB数据表的索引 与MyISAM数据表相比,索引对InnoDB数据的重要性要大得多。在InnoDB数据表上,索引对InnoDB数据表的重要性要在得多。在 InnoDB数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的苊、基础。”数据行级锁定”的意思是指在事务操作的执行过程中锁定正在被处理的个别记录,不让其他用户进行访问。这种锁定将影响到(但不限于)SELECT…LOCK IN SHARE MODE、SELECT…FOR

MySQL优化(超完整版)(一)

我的梦境 提交于 2019-11-28 18:05:40
一、 MySQL的优化   前言 :     MySQL数据库的优化模块:       - 数据库的设计—三大范式       - 数据库的索引:唯一索引、主键索引、聚合索引、复合索引、默认索引       - SQL优化       - 分库分表       - 读写分离:提升IO性能       - 存储过程优化       - 对MySQL配置进行优化(my.ini)       - 定时清理碎片 1. 数据库的设计 (1) 什么是三大范式?     为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。三大范式包括:     - 1NF :属性的原子性,要求属性具有原子性,不可分解。     - 2NF :对记录的唯一性,表中记录是唯一的(通常通过主键来实现)。     - 3NF :是对字段冗余性的约束,要求字段没有冗余。 (2) 1NF -- 案例 create table `user`( id int, name varchar(10), address varchar(10) ); insert into `user` values(1,’zs’,’上海市浦东新区’); 此时这里就针对address这个字段,有了可分割性,可将将address分为:-市-区。 此时表的设计就不遵循1NF。 (3) 2NF -- 案例