MYSQL系列-索引原理和实现

每日一记:最新发现知道的越多,不知道的就越多,还得多积累多学习,今天整理一下mysql索引吧。

      提到mysql的索引,想必很多人都能说上几句:提高查询效率、优化sql的方式。但是索引的底层实现到底是什么?索引是如何存储的?

什么是索引
      MySQL官方对索引的定义为:索引(Index)是帮助mysql高效的获取数据的数据结构。可简单理解为排好序的快速查找数据结构。 也就是说数据库除了维护数据本身之外,还维护着一个满足特定查找算法的数据结构。这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引。 

操作索引语法

创建

ALTER TABLE 表名 ADD [UNIQUE] INDEX 索引名(字段名);
或
CREATE INDEX 索引名 ON 表名(字段名);

删除

DROP INDEX 索引名 ON 表名

查看

show INDEX FROM 表名

索引的物理结构
1.数据库文件存储的位置:window系统在my.ini配置文件中;Linux系统在/etc/my.cnf文件中 的 dataDir参数对应的数据目录中。

2.每一个数据库对应一个文件夹
(1)MYISAM引擎:每一个表(table_name)
table_name.MYI:存放的是数据表对应的索引信息和索引内容
table_name.FRM:存放的是数据表的结构信息
table_name.MYD:存放的是数据表的内容
(2)InnoDB引擎:每一个表(table_name)
table_name.frm:存放的是数据表的结构信息
数据文件和索引文件都是统一存放在ibdata文件中

3.索引文件都是额外存在的,对索引的查询和维护都是需要消耗IO的

InnoDB引擎表: 

å¨è¿éæå¥å¾çæè¿°

å¨è¿éæå¥å¾çæè¿°

 

MYISAM引擎

å¨è¿éæå¥å¾çæè¿°

å¨è¿éæå¥å¾çæè¿°

索引的优缺点
优势

类似大学图书馆建书目索引,提高数据检索的效率,降低数据库的IO成本;
通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗。

劣势

索引本身也是表,因此会占用存储空间,一般来说,索引表占用的空间的数据表的1.5倍;
索引表的维护和创建需要时间成本,这个成本随着数据量增大而增大。构建索引会降低数据表的修改操作(删除,添加,修改)的效率,因为在修改数据表的同时还需要修改索引表。 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值