关系型数据库---MySQL---索引
1、概述
参考资料:http://blog.codinglabs.org/articles/theory-of-mysql-index.html
1.1 索引的本质:
MySQL官方对索引的定义:索引是 帮助MySQL高效获取数据的 数据结构(索引是数据结构);
1.2 在数据之外,数据库系统 还维护着 满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构之上实现高级查询算法(这种数据结构,就是索引);
1.3 目前大部分 数据库系统、文件系统都采用 B-Tree或者B+Tree作为索引结构;
1.4 MyISAM存储引擎使用B+Tree作为索引数据结构;
MyISAM数据表的索引、数据是分开的:
data/dbname/tablename.MYD: 存放MyISAM数据表的数据;
data/dbname/tablename.MYI: 存放MyISAM数据表的索引;
1.5 InnoDB存储引擎使用B+Tree作为索引结构:
InnoDB数据表默认将索引、数据存储在一个文件中: data/dbname/tablename.idb
2、特点:
1.1 优势:加快数据检索操作;
1.2 劣势:
1.1.1 数据修改操作变慢,因为每修改一次数据记录,索引必须刷新一次;
1.1.2 为了弥补这一缺陷,许多SQL命令都有一个DELAY_KEY_WRITE选项,不需要每次修改数据都刷新索引,等待全部数据插入/修改完成后再更新索引;
1.1.3 占用硬盘空间;
3、InnoDB数据表的索引:
1.1 在InnoDB数据表上,索引不仅会在搜索数据记录时发挥作用,还是数据行级锁定机制的基础;
【数据行级锁定机制】:在事务操作的执行过程中锁定正在被处理的个别记录,不让其他用户进行访问;
1.2 出于效率方面的考虑,InnoDB的数据行级锁定机制实际发生在索引上,而不是数据表自身上;
1.3 【限制】:
1.1.1 如果where子句中出现!=,将无法使用索引;
1.1.2 如果where子句中出现函数,将无法使用索引;
1.1.3 如果where子句中使用了like操作符,只有'abc%'才会使用索引;'%abc%'将无法使用索引;
1.1.4 order by操作时,只有order by后不是一个查询条件表达式时才会使用索引;
4、索引分类:
1.1 普通索引:
1.1.1 由关键字key或者index定义的索引;
1.1.2 作用:加快对数据的检索速度;
1.1.3 该数据列可以包含相同的值;
1.2 唯一索引:
1.1.1 如果确定某个数据列包含不同的值,创建时应建为唯一索引;
1.3 主索引:
即为主键创建的主键索引;
1.4 复合索引:
1.5 全文索引:(FULLTEXT())
1.1.1 文本字段上的普通索引只能加快对出现在字段内容最前面的字符串进行检索
1.1.2 InnoDB数据表不支持全文索引;
关系型数据库---MySQL---索引的更多相关文章
- Hadoop生态组件Hive,Sqoop安装及Sqoop从HDFS/hive抽取数据到关系型数据库Mysql
一般Hive依赖关系型数据库Mysql,故先安装Mysql $: yum install mysql-server mysql-client [yum安装] $: /etc/init.d/mysqld ...
- MongoDB 与传统关系型数据库mysql比较
与关系型数据库相比,MongoDB的优点: 转载自 http://blog.sina.com.cn/s/blog_966e430001019s8v.html①弱一致性(最终一致),更能保证用户的访问 ...
- Flink RichSourceFunction应用,读关系型数据(mysql)数据写入关系型数据库(mysql)
1. 写在前面 Flink被誉为第四代大数据计算引擎组件,即可以用作基于离线分布式计算,也可以应用于实时计算.Flink的核心是转化为流进行计算.Flink三个核心:Source,Transforma ...
- 关系型数据库MySQL多实例
简介 MySQL数据库是一个中小型关系型数据库管理系统,软件开发者为瑞典MySQL AB公司.在2008年1月16号被Sun公司收购后Sun公司又被oracle公司收购.目前MySQL被广泛地应用在I ...
- Python3爬虫(九) 数据存储之关系型数据库MySQL
Infi-chu: http://www.cnblogs.com/Infi-chu/ 关系型数据库关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以关系型数据库的存储方式就是行列 ...
- 关系型数据库MySql简介
什么是关系型数据库? 数据库就是用来存储数据的仓库,是一种特殊的文件. 根据存储的数据不同,划分为关系型数据库和非关系型数据库. 关系型数据库就是指 建立在关系模型基础上的数据库,通俗来讲这种数据库就 ...
- sqlyog管理关系型数据库mysql数据库之sqlyog的安装管理
.关系型数据库 有库有表,有关系 非关系型数据库 存储对象.集 下面的所有演示截图都是基不超过SQLyog 11进行的. 1. 2.点击上图中的应用程序,进行安装. 安装sqlyog , 账户dd0 ...
- 关系型数据库——MySQL
[MySQL架构图] MySQL简要架构图如下图所示,引擎层以插件方式集成了不同的存储引擎,它们共用Server层对外提供服务. 连接器:用于连接管理,进行身份认证及权限相关的管理.(登录MySQ ...
- 数据库-mysql索引
MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索 ...
- 数据库-mysql索引篇
点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. mysql的索引类型? mysql中有5种索引:普通索引.唯一索引.主键 ...
随机推荐
- Apache-SimpleEmail 简单应用
比JavaMail使用方法要直接,jar包只需要在JavaMail的基础上添加commons-email-1.4.jar即可. 代码: // QQ邮箱发送邮件 SimpleEmail simpleEm ...
- pod lib lint 报错 Unable to find a specification for `AMap2DMap` depended upon by `DingtalkPod
执行 pod验证 报错如下 ➜ DingtalkPod git:(2.0.0) ✗ pod lib lint --sources='https://github.com/AloneMonkey/Mo ...
- BZOJ - 2553 :禁忌(AC自动机+贪心+奇怪的矩阵)
Magic Land上的人们总是提起那个传说:他们的祖先John在那个东方岛屿帮助Koishi与其姐姐Satori最终战平.而后,Koishi恢复了读心的能力…… 如今,在John已经成为传说的时代, ...
- ***静态成员的定义及初始化 for c++ for新用法
静态成员的初始化要在类外不然报错error: ISO C++ forbids in-class initialization of non-const static member '***' 但是声明 ...
- 「LOJ#10068」「一本通 3.1 练习 3」秘密的牛奶运输(次小生成树
题目描述 Farmer John 要把他的牛奶运输到各个销售点.运输过程中,可以先把牛奶运输到一些销售点,再由这些销售点分别运输到其他销售点. 运输的总距离越小,运输的成本也就越低.低成本的运输是 F ...
- 【Python】File IO
1.numpy.genfromtxt() numpy.genfromtxt() CSV文件很容易被numpy类库的genfromtxt方法解析 2.
- BZOJ2028:[SHOI2009]会场预约(平衡树版)
浅谈\(splay\):https://www.cnblogs.com/AKMer/p/9979592.html 浅谈\(fhq\)_\(treap\):https://www.cnblogs.com ...
- linux历史及基本知识
1. Linux的历史: 1973年,Ken Thompson以C语言写出第一个正式版的UNIX内核, 1977年:重要的UNIX分支——BSD(Berkeley Sofeware Distribut ...
- 更换mysql数据目录后出现 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 的解决办法
服务器上的mysql默认数据目录为/var/lib/mysql/,同时服务器的/空间不是很大,而近期又有大量的日志需要导入进行分析,时常搞得/的空间捉襟见肘,晚上一狠心就想把mysql的数据目录转移到 ...
- mysql基础itcast笔记
1. 课程回顾 mysql基础 1)mysql存储结构: 数据库 -> 表 -> 数据 sql语句 2)管理数据库: 增加: create database 数据库 default c ...