MySQL索引大小
我有两个主键完全相同的表。例如,MySQL索引大小,mysql,indexing,Mysql,Indexing,我有两个主键完全相同的表。例如,table1和table2中的school\u name列具有相同的值(这两个表具有相同的行数) 表1: CREATE TABLE `table1` ( `school_name` varchar(512) NOT NULL, `descp` mediumtext, PRIMARY KEY (`school_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED;
table1
和table2
中的school\u name
列具有相同的值(这两个表具有相同的行数)
表1:
CREATE TABLE `table1` (
`school_name` varchar(512) NOT NULL,
`descp` mediumtext,
PRIMARY KEY (`school_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED;
表2:
CREATE TABLE `table2` (
`school_name` varchar(512) NOT NULL,
`address` mediumtext,
--5 more fields here...
PRIMARY KEY (`school_name`),
--4 more other index...
--E.G., KEY field_3_index (field_3)...
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED;
以下是索引大小结果:
+---------------+-----------------+--------------------+------------+
| database_name | table_name | index_name | size_in_mb |
+---------------+-----------------+--------------------+------------+
| schoolsDB | table1 | PRIMARY | 10355.97 |
| schoolsDB | table2 | PRIMARY | 794.69 |
+---------------+-----------------+--------------------+------------+
为什么表2的主键索引比表1的主键索引大得多?
看起来这是由于表2中那些额外的列和索引造成的,但我不明白背后的原因
谢谢你的帮助 - 不要使用MyISAM。切换到InnoDB
- InnoDB磁盘占用空间是MyISAM的2-3倍。(这包括数据、索引和“可用”空间。)
- 不要在InnoDB上使用
;这是浪费时间。(很少有例外。)是的,优化表
删除了一些零碎的空间,但是当你插入/更新/删除时,它很快又被破坏了OPTIMIZE
- MyISAM的索引看起来都很相似——键加上指针
- InnoDB的
主键实际上是按主键排序的数据。因此,它的大小只是BTree结构中的额外(非叶)节点
- InnoDB的次键包括键的列和PK的列
- 在大多数情况下,表的1:1配对是糟糕的模式设计。您的案例可能是一个很好的异常示例—将很少使用的庞大列(
)移出主表(description
)table2
- 您可能会发现InnoDB的“压缩”不是很有用。它节省了一些磁盘空间,但不一定有助于提高速度