在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,接下来主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式。
大家去打开你本地MySQL安装的目录
这是楠神本地的MySQL安装目录,里面有个data目录,顾名思义data目录里肯定是装数据的。MySQL所有表的数据都存放在这。
里面有很多文件夹,是这样的,你MySQL上有多少个数据库,这里相应地就有一个同名的文件夹。
点击进去一个文件夹,里面会有如下的几种后缀文件:
*.frm、*.MYD、*.MYI、*.ibd
这些文件各代表什么意思?
假如数据库a里有一张表b,它是MyISAM存储引擎。
data\a中会产生3个文件:
b.frm :描述表结构文件,字段长度等,其实就是表的定义文件。
b.MYD(MYData):"D"数据信息文件。
b.MYI(MYIndex):"I"索引信息文件。
从数据文件我们应该知道了,MyISAM存储引擎 数据 与 索引 是完全分开的。
假如数据库a里有一张表c,它是InnoDB存储引擎。
data\a中会产生1个或者2个文件:
c.frm :描述表结构文件,字段长度等,其实就是表的定义文件。
如果采用独立表存储模式,data\a中还会产生c.ibd文件(存储数据信息和索引信息)。
如果采用共享存储模式的,数据信息和索引信息都存储在data\ibdata1文件中。
查看一下是共享表空间,还是独立表空间,可用SQL语句:
show variables like '%per_table%';
如果是OFF,肯定不是独立表空间。如果是ON的话,也不一定是独立表空间。最直接的方法就是查看硬盘上的文件,独立表空间,每个表都对应了一个空间。
如果不想所有的表共享存储,可在MySQL的配置文件修改配置
innodb-file-per-table=1
不管是独立存储还是共享存储,有一点我们要明确地知道,InnoDB存储引擎 数据 与 索引 是在一个文件里的。
有了这节内容的初步了解,下节讨论两种存储引擎索引的实现方式。