其实数据库索引对于我们做数据检索的时候,是有很大的帮助的,提高我们的检索效率,有些同学会这么认为,有人说建索引会提高效率,那把所有的列都建成索引就完事了吗,这个不是这样的,所以索引肯定是有自己的有缺点的,我们先看看索引的优点有哪些为什么要创建索引呢?这是因为创建索引可以大大提升系统的查询性能,索引要解决最根本的问题,就是提高查询的性能,以及效率,这是他存在的唯一的一个条件1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性其实最后唯一性最后也会映射到查询效率上,也就是我们在查某一行数据的时候,如果你用的条件是一个主键,他所查询的效率,就比查询非主键的效率要高,为什么呢,其实我上午讲的内容已经说出来了,咱们说MYSQL当中会有自动创建聚合索引的能力,还记得吗,聚合索引聚合的是什么,先找他的主键,如果有主键把主键聚合进来,如果没有主键,找唯一性约束的,可以生成一个唯一的索引键,那说明只要我用主键查,就一定会走索引,那索引里面的值对外换算成什么呢,其实就是你这个数据在物理磁盘上确切的存的物理位置,那我是不是可以直接去磁盘拿到这个数据,所以主键查询也是索引查询,以后你们到公司的时候,特别是新项目在设计数据库的时候,DBA肯定会说这么一句话,你们在写SQL语句的时候,如果有主键作为条件的一定要用主键作为条件,其实大家知道,但是他还是得啰嗦一句,足以证明主键和不用主键有很大的差异的2. 可以大大加快数据的检索速度,这也是创建索引的最主要的原因3. 可以加速表和表之间的连接,特别是在实现数据的参考完整性方法有特别的意义,一般发现我们在建外键的时候,外键所参照的列必须是一个主键,还记得吗,外键锁参照的列,不是外键列本身啊,是外键所参照的这个列,必须得是一个主键,所以正是因为有这样一个约束在里面,那他在做表与表之间的连接的时候4. 在使用分组和排序字句进行数据检索的时候,同样可以显著减少查询中分组和排序的时间,前四点都是围绕这性能,5. 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能,这个优化隐藏器是什么呢,就是我们看的架构图里面的,解析器对他进行优化,优化我们的执行计划,他肯定会缓存的,这样下回可以直接去拿这个东西了,所以这也是他的优点所以以上5点都是为了优化性能的
也许会有人问,增加索引有如此多的优点,为什么不对表中的每一个列创建一个索引呢?这个问题问的非常好,既然是这样,那我们就都建索引呗,这种想法有其合理性,然而也有片面性,虽然索引有许多优点,但是为表中的每一个列增加索引,是非常不明智的,这是因为,增加索引,会有许多不利的方面,所以索引是把双刃剑他并不是百分百好的,他还有自己的缺点1. 创建索引和维护索引需要耗费时间,谁维护,首先这个索引一旦创建了,对于索引里的信息,并不是我们去维护的,而是由数据库去维护的,那也就意味着,如果索引的信息会经常的变更,数据库就需要对索引进行维护,维护了肯定耗费时间,这种时间随着数据量的增加而增加,或者随着索引量的增加而增加,我不知道你们有没有了解过B-TREE,Balance Tree,你会发现Balance Tree往里面放数据可容易了,但是一旦你把某个节点删掉了,他想重新归纳这棵树的时候非常的麻烦,麻烦不亚于把这棵树打散了再建一个新的树,那么这个过程就是维护索引,为什么这么说呢,MYQL里面对于索引的存储结构,采用的就是Balance Tree,红黑树,明白我的意思吗,所以说他对于索引的维护是比较耗时的2. 索引需要占用物理空间,除了数据表占用数据空间之外,每一个索引还需要占一定的物理空间,如果要建立聚簇索引那么需要的空间更大,也就是说索引一旦建立完了,索引是存在内存当中还是存在磁盘当中,一定是存在磁盘当中的,只要借助这个机会说一个东西,如果我的MSYQL用的是InnoDB,在我的MYSQL里存的数据是什么,data里面,这是你所有的库咱们就找一个test这库,这三个文件看到了吗,frm这个哪来的,如果你要是没换引擎,注意看有一个叫ibd的文件,这个ibd文件是什么呢,是做数据存储时的数据文件,你看看这些都是ibd,对于他也有一个frm,这是表结构的,两个引擎产生的文件都是一样的,然后这里有一个ibdata1,这是什么意思啊,我们用MYSQL做主从搭建的时候,你们有没有遇到这个问题,就是MYSQL的集群搭建,导致主库的数据不能复制到从库里,数据不同步,然后看slave的状态,这种问题是及其容易产生的,你在从库里面写了插了一条数据,然后你在主库里又写了一条数据,其实现在主库和从库已经不匹配了,你在从库里插入一条,所以我们主从搭建的时候,插入以主库为主,查询以从库为主,否则会有数据同步不过来,那怎么解决这个问题啊,有人说我重新装两个MYSQL,大家注意,你首先要把从库的数据给删掉,然后取主库的配置目录下,把.log的文件,做数据迁移,把所有的.log删掉,把ibdata删掉,这里记录的是什么呢,就是当前表的表空间的定义,也就是MYSQL的InnoDB在做数据存储的时候,这里面放的是公用表空间,我们所关注的是什么呢,是这里面的ibd文件,通过我讲完这一节,你现在看这些文件能看懂了吧看扩张名就懂了吧,能看懂吧,就是这个意思啊,能看懂说明目的就达到了,这就提到这里,接下来我们继续往下来
什么样的字段适合创建索引呢?1. 索引是建立在数据库表中的某些列的上面,因此在创建索引的时候,应该仔细考虑哪些列上可以创建索引,在哪些列上不可以创建索引一般来说,应该在这些列上创建索引,例如:1. 在经常需要搜索的列上,可以加快搜索的速度,就是这个列会经常当做一个查询条件,这是第一点啊2. 在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构,这句话什么意思呢,就是能用主键去查,就一定要用主键去查3. 在经常用在连接的列上,这些列主要是一些外键,可以加快连接查询,外键给他建立一个索引,其实这个问题你知道就可以,等你未来工作你还会发现,如果你做的是一个互联网项目,其实我们表和表之间是有外键的,绝对不会建立外键约束,为什么 不会建立外键约束,他最终是为了建分库分表,外键有这样的一个特点,我A,B分库又分表了,很有可能这两个表不在一个库里面,外键就会报错了,外键找不到,这两个表会有外键约束的,这样就比较灵活了4. 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序了,其指定的范围是连续的,这个特别有意思,MYSQL底层是用一个B-Tree,Tree树的特点就是查询快,正是因为树的特点,那你完全可以对里面的索引进行排序了,那你对这个排序了,把这个列建一个索引,换一个来说,因为他是有序的,起码它会少了哪个环节,把所有的数据都拿出来,树是支持排序5. 在经常需要排序的列上创建索引,其实跟她是一个道理,还是那句话,利用树排序的道理,什么叫排序的列上,order by上6. 在经常使用where子句中的列上创建索引,加快查询的判断条件建立索引,一般按照select的where条件来建立,比如select的条件是where f1 and f2,那么我们如果在字段f1和字段f2上建立索引也是没用的,只有在字段f1和字段f2同时建立索引才是有用的,这句话什么意思,两个都有索引才有提升,只建一个f1或者只建一个f2是没用的,其实这个很好理解,他考虑f1不可能不考虑f2,我们需要记得是什么啊,就像我刚刚说的这个,都是我们需要记住的,以便于你能更灵活的建立索引,你得知道索引的特点,这就是索引的一个特点

mysql的索引介绍_1相关推荐

  1. mysql的索引介绍_2

    什么样的字段不适合创建索引呢?同样,对于有些列不应该创建索引1. 对于那些查询中很少使用或者参考的列不应该创建索引,就是我查的过程当中,where语句当中没有,这样的东西你不建他,建了反而不是什么好事 ...

  2. mysql的索引介绍

    一.索引是什么 mysql 官方对于索引的定义为:索引(Index)是帮助 mysql 高效获取数据的数据结构.可以得到索引的本质:索引是数据结构. 我们可以简单的把索引理解为 "排好序的快 ...

  3. MySql四大索引介绍以及创建语法

    四大索引介绍 1.主键索引: 主键是一种唯一性索引,但它必须指定为PRIMARY KEY,每个表只能有一个主键. 2.唯一索引: 索引列的所有值都只能出现一次,即必须唯一,值可以为空. 3.普通索引: ...

  4. MySql数据库索引介绍

    写在前面 数据库索引对我们来说是透明的,因为数据库表创建索引前后,SQL语句都可以正常运行,索引的运用只是数据库引擎工作时候的优化手段.但是,这并不是说数据库索引仅仅是数据库设计开发人员和运维人员的事 ...

  5. MySQL InnoDB索引介绍及优化

    转载自 https://segmentfault.com/a/1190000007445807 一.索引概念 索引(index)翻译为一个目录,用于快速定位我们想要找的数据的位置.例如:我们把一个数据 ...

  6. MySQL 聚合索引实例_1:mysql 聚合索引

    1: PRIMARY KEY (`id`), UNIQUE KEY `uid` (`uid`,`task_id`) 查询: mysql> explain select * from user_t ...

  7. MySql查询优化性能调优,sql性能自测方法,及Mysql索引介绍

    MySql查询优化性能调优,sql性能自测方法,及Mysql索引介绍 前言 一.普通优化加索引(适用于where条件后一个查询条件) 二.组合查询加索引(适用于where条件后多个查询条件) 三.My ...

  8. mysql索引linke和等于_MySQL索引介绍和实战

    索引是什么 mysql官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构. 可以得到索引的本质:索引是数据结构,索引的目的是提高查询效率,可以类比英语新华字典,根据目录定位词 ...

  9. Mysql索引介绍及使用注意事项,limit分页查询,慢查询分析

    Mysql索引介绍及使用注意事项,limit分页查询,慢查询分析 本文将从以下十二个方面进行介绍: 一.索引概念介绍 二.索引类型FULLTEXT,HASH,BTREE,RTREE有什么功能和性能上的 ...

最新文章

  1. GAN眼中的图像翻译(附神奇歌单)
  2. 深度学习基础:张量运算
  3. 如何利用Python调用一些搜索引擎网站?
  4. 再谈 iptables 防火墙的 指令配置
  5. OpenGL 延迟着色法Deferred Shading
  6. c语言哈夫曼压缩文本,用哈夫曼压缩文件(C语言)
  7. java 数组合并_数组与链表
  8. SpringMVC控制类的Controller方法返回值
  9. 收到计算机系统公司退款会计分录,​收到客人的退款的会计分录怎么写
  10. 将WebAPI发布到本地服务器与远程服务器
  11. 谁分配谁释放HEAP
  12. c语言 16进制编辑器,十六进制编辑器(010editor)最新下载
  13. 广数系统加工中心编程_数控加工中心编程的步骤
  14. 给群联PS3111/inic6081量产工具添加闪存颗粒支持
  15. Android 车机系统 One Binary 适配白天黑夜的一个方案
  16. Glide加载图片缩放模式
  17. flac转换成mp3,flac转mp3方法
  18. pandas之链式索引问题(chained indexing)
  19. 关于GTP-4,这是14个被忽略的惊人细节!
  20. C++实现大数运算(加减乘除求余)

热门文章

  1. UVa 11027 - Palindromic Permutation 回文串,组合加搜索
  2. 求1-100之间的奇数和、偶数和
  3. Developer Express 中Gridcontrol获取选中行单元格的值
  4. 公司SAP ERP 项目开始上线切换和最终用户培训了!
  5. 【JFreeChart】JFreeChart—输出折线图
  6. ubuntu16定时任务crontab
  7. 什么是SVC模式【转】
  8. C++与Java多态的区别
  9. vsftpd.conf配置范例
  10. javascript-按圆形排列DIV元素(三)实例---- 图片按椭圆形转动