mysql索引及数据库引擎

打印 上一主题 下一主题

主题 1581|帖子 1581|积分 4743

顺序io(不必要每次都磁盘寻址,效率高),随机io(必要每次都磁盘寻址,效率低)
   怎样正确的创建合适的索引?
   索引是一种分散存储的数据布局
   

                       
                   磁盘io特性:每次交互是以页为单元,每页4K数据。innoDB每次和磁盘交互是四页16k数据(InnoDB叶节点data域生存了完备的数据记载相比力MYISAM(因为只存储了叶子节点的指针,所占空间1kb都不到)更能充实利用每次磁盘io)
                       
                   InnoDB 主键索引存储了完备的数据库记载行,辅助索引仅存储了索引和主键值(这里提供了一种解决海量数据分页题目的思绪,例如要取一张千万级别数据的表中5百万到5百万零五十行的记载,怎样快速获取,可以先使用辅助索引查询找主键,再通过主键走主键索引获取数据库记载。)
                       
                   mysql索引底层使用的是B+树,索引全部元素都位于树的叶子节点,相邻叶子节点间有双向指针查找索引时先将根节点load到磁盘中(这是一个磁盘IO过程,比力耗时,)在节点中定位指向下一级节点的指针,三层B+树饱和状态能存储大概2000万个索引
   什么叫做聚集索引(聚簇索引)?
   就是索引键值的逻辑顺序跟表数据行的物理存储顺序是一致的。(比如字典的目次是按拼音排序的,内容也是按拼音排序的,按拼音排序的这种目次就叫聚集索引)。
   MYISAM引擎主键好坏聚族索引,索引和数据分开存储的,  不支持变乱
   InnoDB是主键索引是聚族索引,查询的时间不消回表,少一次磁盘IO;  支持变乱
   聚族索引,B+树叶子节点不仅包罗指针还包罗数据
   固然InnoDB也使用B+Tree作为索引布局,但具体实现方式却与MyISAM截然不同。
   第一个重大区别是InnoDB的数据文件本身就是索引文件。MyISAM索引文件和数据文件是分离的,索引文件仅生存数据记载的地址。而在InnoDB中,表数据文件本身就是按B+Tree构造的一个索引布局,这棵树的叶节点data域生存了完备的数据记载。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。
   无用的索引会拖垮数据库操作的性能(更新删除新增树的布局要变化,节点内关键字会重排)
   myisam引擎中B+树数据库记载行的指针(5.5版本之前的默认引擎)
   innodb引擎主键索引叶子节点存储了索引和数据记载(5.5版本之后的默认引擎)
   列的离散性越高,选择性就越好(离散型太低还不如全表扫描,不适合建立索引)
   离散性太差,mysql可能自动不选择索引(由mysql的查询优化器实现)
   前缀索引:当必要给长度很长的字符串字段加索引时,可以使用前缀索引,给字符串的前几个字符位加索引,必要先判定一下前几位字符的离散度也就是重复率。
   联合索引:选择原则:
   1、经常用的列优先(最左匹配原则)
   2、选择性(离散度)高的列优先(离散型高原则)
   3、宽度小的列优先(最少空间原则)
   覆盖索引
   1、如果查询里可通过索引节点中的关键字直接返回,则称为覆盖索引
   例 user表中 联合索引为name+age  查询语句为select name, age from user where name=?
   则为覆盖索引,直接返回叶子节点位置的数据,不消再回表,大大减少磁盘io,提高性能(这就是为什么公司不让使用select * ,有可能掷中覆盖索引,只返回必要的数据,减少数据包的巨细,降低数据传输的开销)
   

   索引失效的情况
   1.where条件中not in、or和<>操作无法使用索引(离散型太差);
   2.复合索引未用左列字段;
   3.like以%开头;
   4.必要范例转换;
   5.where中索引列有运算;
   6.where中索引列使用了函数;
   7.如果mysql以为全表扫描更快时(数据少,离散型差等情况);
   插拔式存储引擎
   CSV存储引擎
   (数据存储以CSV文件格式)
   特点:不能定义没有索引、列定义必须为not null 、不能设置自增列
   -->不适用大表或者数据的在线处理
   CSV数据的存储用逗号隔开,可直接编辑CSV文件举行数据的编排
   -->数据安全性低
   应用场景:数据的快速导入导出,表格直接装换成CSV
   Archive存储引擎
   压缩协议举行数据的存储(ARZ文件格式)
   特点:只支持insert和select两种操作,只答应自增id建立索引,行级锁,不支持变乱,数据占用磁盘少
   应用场景:日记体系,大量的装备数据收罗
   Memory存储引擎(heap存储引擎)
   Myisam存储引擎
   特点:select count(*) from table无需举行数据的扫描
           数据(MYD)和索引(MYI)分开存储
         表级锁
         不支持变乱
   Innodb(5.5版本后的默认存储引擎)
               支持变乱、 行级锁、聚集索引,支持外键
       末了编辑于:2025-04-21 10:57:35       ©   禁止转载, 著作权归作者全部,转载或内容合作请联系作者     

喜好的朋侪记得点赞、收藏、关注哦!!!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

慢吞云雾缓吐愁

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表