.myi是什么文件

这就是坑,别信单表索引能解决所有查询优化问题。

别这么干,过度索引会增加数据库维护成本,降低写操作效率。

mysql的数据文件是什么格式保存在哪里?

上周。
MySQL数据文件格式和位置。
得搞清楚。

InnoDB存储引擎: 文件格式:
.frm:表定义信息。

ibdata1 :表空间文件。
存储数据和索引。

.ibd:单独表空间文件。
innodb_file_per_table 开启的话,每个表有自己 .ibd。

保存位置:
ibdata1 和 .ibd:通常在 MySQL 安装目录 data 文件夹。

.frm:默认在 C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5 .1 \data。

MyISAM存储引擎: 文件格式:
.frm:表定义信息。

.MYD:表数据。

.MYI:表索引。

保存位置:
这三个文件都在 C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5 .1 \data。

自定义路径:
安装时指定了路径,就保存在那里。

忘了路径咋办?
命令行解决。

cd 到 MySQL 安装目录 bin 文件夹。

输入 mysql 进入交互模式。

输入 show global variables like '%datadir%'。

就能看到位置了。

就是这样。

mysql中.ibd是什么文件

等等,昨天我重启了测试服务器的MySQL,发现有个备份任务报错,提示是ibd文件损坏。
赶紧用xtrabackup恢复了一下,数据全在,就是那个user表的ibd文件大小跟之前对不上。
当时我就想,这文件到底是个啥构造啊。

在大学实验室那会儿,我管着个小机房,有个学生总抱怨数据库查询慢。
我进服务器一看,innodb_buffer_pool_size就开了一半,几百M的内存全让其他进程占了。
改完参数后,他再跑那个全表扫描的SQL,居然从5 秒缩到0.3 秒。
我就琢磨着,这缓冲池里到底装了啥?
话说回来,这文件分页存储挺有意思。
上次用mysqlfrm检查表结构,发现第5 页有个记录被压缩成4 KB,旁边还留个红色叉叉标记。
说明innodb_compression默认开启时,会自动把连续的空格字符给压缩掉。
但奇怪的是,压缩前占1 6 KB,压缩后只显示1 2 KB,中间怎么算的?还有个细节,VARCHAR字段实际只用了8 字节,另外4 字节是变长偏移,这设计得挺精巧。

突然想到,行溢出处理时,如果BLOB数据特别大,溢出页会不会变成孤立块?上次测试分表时,我把表拆成两个,发现原表主键为1 0000的记录,居然在两个新表的ibd文件里都有残留。
当时以为事务日志出问题,后来查innodb_rollback_segment参数,才明白是未提交事务产生的回滚指针没清理干净。
这让我想起一个更诡异的事,有个测试环境把innodb_file_per_table设成off,结果备份出来的ibd文件里,居然混着两个库的表数据...
现在服务器运行着三个业务库,每个库的ibd文件都超过1 G了。
主库user表那个文件,用ls -l看是1 .2 G,但mysqlshow表大小是9 5 0M。
差的那3 00M算啥?是未使用的页?还是主键索引的冗余?innodb_page_size是1 6 KB,那6 5 5 3 5 页里,平均每页存1 5 KB数据?这利用率看着比传统文件系统还低啊。

一文让你对mysql索引底层实现明明白白

哎,咱们聊聊这个MySQL的索引,哎哟,这东西可真是数据库里的小秘密,懂它的人都能玩转数据库查询。

当初我刚开始学这个,哎,那可真是头都大了,啥叫索引啊,它咋个帮助查询的啊。
后来慢慢明白了,这索引啊,就相当于一本书的目录,你想找哪一页,直接翻到那一页,多快啊。

再来说说这磁盘存取,哎,这个更复杂,想象一下,磁盘就像一个巨大的唱片,你要找数据,磁头得来回跑,跑一次就一次I/O,这得多慢啊。
所以,索引就是为了减少这种跑来跑去,直接把数据位置告诉你,省了多少事儿啊。

这索引的数据结构,可多了去了,有二叉树,红黑树,HASH,B-Tree,B+Tree,每个都有它的特点和适用场景。
我那时候也懵,二叉树,红黑树,这玩意儿多高啊,查询效率能行吗?后来才反应过来,B+Tree这玩意儿多好,它的高度低,能存的东西多,还能直接做范围查询。

再说说这个存储引擎,MyISAM和InnoDB,哎,各有各的玩法。
MyISAM,非聚集索引,适合读,InnoDB,聚簇索引,适合写,还支持事务,这俩可真是各有千秋。

联合索引,这个可有意思了,得按照最左前缀原则来,你把最前面的字段用上,才能用好这个索引。
这东西得好好研究研究。

总结一下,这索引啊,选对数据结构,选对存储引擎,遵循最左前缀原则,这数据库查询效率才能上来。
哎,学这个,真是得一步步来,不能急。