一、数据库索引

很大一部份程序员对索引的了解仅限于到“加索引能使查询变快”这个概念为止,但有没有考虑过索引为什么能使查询变快呢?索引是使用B+树(二叉树)实现的数据结构。

上图中左边是数据库中的数据表,有col1和col2两个字段,一共有15条记录;右边是以col2列为索引列的B_TREE索引,每个节点包含索引的键值和对应数据表地址的指针,这样就可以都过B_TREE在O(logn)的时间复杂度内获取相应的数据,这样明显地加快了检索的速度。再来思考下以下几个问题:

  1. 数据表为什么会使用主键?
  2. 使用索引后会使插入、修改、删除变慢?
  3. 什么时候需要在两个字段上加索引?

1.数据表为什么会使用主键?

一个没加主键的表,它的数据无序的放置在磁盘存储器上,一行一行的排列的很整齐。一个加了主键的表,并不能被称之为「表」。如果给表上了主键,那么表在磁盘上的存储结构就由整齐排列的结构转变成了树状结构,并且是「平衡树」结构,换句话说,就是整个表就变成了一个索引。 这就是为什么一个表只能有一个主键,一个表只能有一个「聚集索引」,因为主键的作用就是把「表」的数据格式转换成「索引(平衡树)」的格式放置。

给表中多个字段加上常规的索引,那么就会出现多个独立的索引结构.字段中的数据就会被复制一份出来,用于生成索引,叶子节点是主键ID,这也就是非聚集索引.,下面就是一个主键和三个常规索引的结构。通过其他索引字段去查,那么叶子节点是主键ID,然后再去根据主键查,聚集索引(主键)是通往真实数据所在的唯一路径

2.使用索引后会使插入、修改、删除变慢?

这个很好理解,使用索引后,会生成新的二叉树,插入速度自然变慢

二、Myisam引擎(非聚集索引)

若以这个引擎创建数据库表Create table user (…..),它实际是生成三个文件:user.myi索引文件、user.myd数据文件、user.frm数据结构类型。如下图:当我们执行  select * from user where id = 1的时候,它的执行流程。

  1. 查看该表的myi文件有没有以id为索引的索引树。
  2. 根据这个id索引找到叶子节点的id值,从而得到它里面的数据地址。(叶子节点存的是索引和数据地址)。
  3. 根据数据地址去myd文件里面找到对应的数据返回出来。

三、Innodb引擎(聚集索引)

  若以这个引擎创建数据库表Create table user (…..),它实际是生成两个文件:user.ibd   索引文件、user.frm数据结构类型。因为innodb引擎创建表默认就是以主键为索引,所以不需要myi文件。下图为innodb表的结构图:很显然它与myisam最大的区别是将整条数据存在叶子节点,而不是地址。(叶子节点存的是主键索引和数据信息)若此时,你在其他列创建索引例如name,它就会另外创建一个以name为索引的索引树,(叶子节点存的是索引和主键索引)。你在执行select * from user where name = ‘吴磊’,他的执行过程如下:

  1. 找到name索引树
  2. 根据name的值找到该树下叶子的name索引和主键值
  3. 用主键值去主键索引树去叶子节点到该条数据信息

四、MyISAM引擎和InnoDB引擎的区别

  • MyISAM:支持全文索引;不支持事务;它是表级锁;会保存表的具体行数.
  • InnoDB:5.6以后才有全文索引;支持事务;它是行级锁;不会保存表的具体行数.

一般:不用事务的时候,count计算多的时候适合myisam引擎。对可靠性要求高就是用innodby引擎。推荐用InnoDB引擎.加了索引之后能够大幅度的提高查询速度,但是索引也不是越多越好,一方面它会占用存储空间,另一方面它会使得写操作变得很慢。通常我们对查询次数比较频繁,值比较多的列才建索引。例如:select * from user where sex = "女", 这个就不需要建立索引,因为性别一共就两个值,查询本身就是比较快的。select * from user where user_id = 1995 ,这个就需要建立索引,因为user_id的值是非常多的。

参考文章:

了解数据库索引及其原理

MySQL为什么要给表加上主键

MySql—索引原理相关推荐

  1. mysql json匹配key为数值_干货篇:一篇文章让你——《深入解析MySQL索引原理》

    概述 最近一段时间重新深入研究了一遍MySQL的内容,今天主要分享分析MySQL索引原理,后续会输出一些关于MySQL方面的干货,希望各位小伙伴喜欢. 一.什么是索引.为什么要建立索引? 关于索引的理 ...

  2. 转:MySQL索引原理及慢查询优化

    来自:http://tech.meituan.com/mysql-index.html MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色, ...

  3. (转)MySQL索引原理及慢查询优化

    转自美团技术博客,原文地址:http://tech.meituan.com/mysql-index.html 建索引的一些原则: 1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到 ...

  4. 干货:MySQL 索引原理及慢查询优化

    转载自 http://blog.csdn.net/kaka1121/article/details/51815368 MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首 ...

  5. 知识点:Mysql 索引原理完全手册(1)

    知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) Mysql-索引原理完全手 ...

  6. MySQL索引原理及慢查询优化

    背景 MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓"好马配好鞍",如何能够更好的使用它,已经成为开发工程师 ...

  7. mysql索引原理及用法

    MySQL索引原理及慢查询优化 Mysql explain用法和性能分析 MySQL 索引优化全攻略 1.索引作用 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提 ...

  8. MySQL索引原理及慢查询优化,了解一下?

    MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库. 虽然性能出色,但所谓"好马配好鞍",如何能够更好的使用它,已经成为开发工程师的必 ...

  9. 比较好的MySQL索引原理

    MySQL索引原理及慢查询优化 - 美团技术团队 https://tech.meituan.com/2014/06/30/mysql-index.html 转载于:https://www.cnblog ...

  10. MySQL索引原理详解

    MySQL索引原理详解 索引的本质 索引的分类 Hash 索引 二叉树 B树(二三树) B+树 主键目录 索引页 索引页的分层 非主键索引 回表 索引的本质 索引的本质是一种排好序的数据结构. 索引的 ...

最新文章

  1. 在Django中,“子弹”是什么?
  2. Android7.1选择时区由默认的GMT+00:00改为GMT+08:00中国标准时间
  3. ExtJS 等待两个/多个store加载完再执行操作
  4. Android 图片放大缩小
  5. 「权威发布」2019年全国大学生电子设计竞赛获奖名单【涵盖国一、二等奖】
  6. layui 工具条实现分页
  7. 虚拟机同步器用易语言怎么写_安装虚拟机的好处或用处是什么/如有效地防止病毒...
  8. nginx upstream配置_效率倍增!网易杭研Nginx自动扩缩容实践
  9. Linux Linux程序练习十(网络编程大文件发送)
  10. neo4j springboot 日志_SpringBoot使用Neo4j
  11. 特种浓缩分离:无机陶瓷膜元件及设备
  12. 蓝桥杯必备算法二:二分搜索
  13. 计算机平面设计教材,《计算机平面设计软件应用——全国中等职业技术学校计算机教材》低价购书_教材教辅考试_孔网...
  14. python数据分析实战:生存分析与电信用户流失预测
  15. 关于数据安全及保密(基于大数据板块的整理)
  16. 决战奶酪之巅,剑指Big Cheeze
  17. 女人眼中最美的七种男人……
  18. Jenkins+GitHub报错hudson.plugins.git.GitException: Failed to fetch from GitHub 443
  19. 黑码定制衬衫质量怎么样? 男装攻略-AI智能量体
  20. android手机怎么看IMEI号码,如何找到您的Android手机的IMEI号码 | MOS86

热门文章

  1. Android 6种快速开发框架
  2. ASP.NET MVC 3.0学习系列文章--Razor and ASP.NET MVC 3.0
  3. nginx+ssl+pm2 部署 nodejs 服务
  4. python-1day
  5. 电子测量第三次作业 bgd150206305
  6. Android 基础概念了解
  7. 【转】解决svn Authorization failed错误
  8. 网站建设——从无到有
  9. 央视再次点赞阿里云ET城市大脑,树立用人工智能治理城市的标杆
  10. javascript console自动点击页面元素