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---索引的更多相关文章

  1. Hadoop生态组件Hive,Sqoop安装及Sqoop从HDFS/hive抽取数据到关系型数据库Mysql

    一般Hive依赖关系型数据库Mysql,故先安装Mysql $: yum install mysql-server mysql-client [yum安装] $: /etc/init.d/mysqld ...

  2. MongoDB 与传统关系型数据库mysql比较

    与关系型数据库相比,MongoDB的优点: 转载自  http://blog.sina.com.cn/s/blog_966e430001019s8v.html①弱一致性(最终一致),更能保证用户的访问 ...

  3. Flink RichSourceFunction应用,读关系型数据(mysql)数据写入关系型数据库(mysql)

    1. 写在前面 Flink被誉为第四代大数据计算引擎组件,即可以用作基于离线分布式计算,也可以应用于实时计算.Flink的核心是转化为流进行计算.Flink三个核心:Source,Transforma ...

  4. 关系型数据库MySQL多实例

    简介 MySQL数据库是一个中小型关系型数据库管理系统,软件开发者为瑞典MySQL AB公司.在2008年1月16号被Sun公司收购后Sun公司又被oracle公司收购.目前MySQL被广泛地应用在I ...

  5. Python3爬虫(九) 数据存储之关系型数据库MySQL

    Infi-chu: http://www.cnblogs.com/Infi-chu/ 关系型数据库关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以关系型数据库的存储方式就是行列 ...

  6. 关系型数据库MySql简介

    什么是关系型数据库? 数据库就是用来存储数据的仓库,是一种特殊的文件. 根据存储的数据不同,划分为关系型数据库和非关系型数据库. 关系型数据库就是指 建立在关系模型基础上的数据库,通俗来讲这种数据库就 ...

  7. sqlyog管理关系型数据库mysql数据库之sqlyog的安装管理

    .关系型数据库 有库有表,有关系 非关系型数据库  存储对象.集 下面的所有演示截图都是基不超过SQLyog 11进行的. 1. 2.点击上图中的应用程序,进行安装. 安装sqlyog , 账户dd0 ...

  8. 关系型数据库——MySQL

    [MySQL架构图] MySQL简要架构图如下图所示,引擎层以插件方式集成了不同的存储引擎,它们共用Server层对外提供服务.   连接器:用于连接管理,进行身份认证及权限相关的管理.(登录MySQ ...

  9. 数据库-mysql索引

    MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索 ...

  10. 数据库-mysql索引篇

    点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. mysql的索引类型? mysql中有5种索引:普通索引.唯一索引.主键 ...

随机推荐

  1. leetcode 290 Word Pattern(map的应用)

    Given a pattern and a string str, find if str follows the same pattern. Here follow means a full mat ...

  2. boobmarklet

    bookmarklet ,一般都称呼为小书签.它是一段 JavaScript 脚本,一般网络上的小书签都是一个链接,它的安装非常简单,只需要把链接拖到你的收藏夹里. 利用它,可以实现一些页面优化.性能 ...

  3. poj3662Telephone Lines——二分+最短路

    题目:http://poj.org/problem?id=3662 二分答案找出符合条件的最小长度: 假设了每个长度后,以这个为标准对每条边赋值,0为小于等于,1为大于,然后按这个值来跑最短路,在看看 ...

  4. 关于Android的HAL的一些理解

    之前一直在学习基于Linux内核的一些字符型驱动的编程,对Linux内核驱动也算有了一些基本的了解吧,后来也做过一些基于Linux内核的驱动开发,像基于Android的CC1101高频模块的驱动开发, ...

  5. Day09: socket网络编程-OSI七层协议,tcp/udp套接字,tcp粘包问题,socketserver

    今日内容:socket网络编程    1.OSI七层协议    2.基于tcp协议的套接字通信    3.模拟ssh远程执行命令    4.tcp的粘包问题及解决方案    5.基于udp协议的套接字 ...

  6. std::ostringstream 转std::string

    http://www.cplusplus.com/reference/sstream/ostringstream/ https://en.cppreference.com/w/cpp/io/basic ...

  7. JS--改变div大小

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  8. ipv4 ipv6简介

    互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),缩写为IP地址(IP Address),在Internet上,一种给主机编址的方式.常见的IP地址,分为 ...

  9. 微信小程序开发之下拉菜单

    实现功能:点击维保人员,调出下拉菜单.选择子菜单时,显示右边的图标表示选中,并进行赋值并进行搜索筛选 Wxml: <view class="dtclass" bindtap= ...

  10. Laravel框架之CSRF防跨站攻击

    laravel框架的csrf防跨站攻击,简单的意思就是说为了防止别人自己写表单非法提交,非法绕过前台的验证,直接将数据往后台执行. 一般的网站如果没有这些安全措施,比较容易被攻击.当然了也还要有其他的 ...