我有一个包含大量文本的 MySQL 数据库,我正在从网站获取数据并将其插入到表中。
我正在为数据库使用 SSD HD (100GB),但空间不足,我认为表结构中的某些东西太大了,我无法预测所有列的大小,所以我正在使用大多数字段的 varchar\text\medium 文本。当我将所有数据插入数据库时,我会监控错误,当我发现某个字段对于我要插入的数据而言太小时,我正在增加字段的大小(例如从 varchar(1000) 到varchar(2000))。
到目前为止,我有大约 1.8M~ 行,我认为我做错了什么。
这是我的桌子的结构 -
CREATE TABLE `PT` (
`patID` int(11) NOT NULL,
`Title` varchar(450) DEFAULT NULL,
`IssueDate` date DEFAULT NULL,
`NoFullText` tinyint(1) DEFAULT NULL,
`Abstract` text,
`ForeignReferences` varchar(15000) DEFAULT NULL,
`CurrentUSClass` varchar(2200) DEFAULT NULL,
`OtherReferences` mediumtext,
`ForeignPrio` varchar(900) DEFAULT NULL,
`CurrentIntlClass` varchar(3000) DEFAULT NULL,
`AppNum` varchar(45) DEFAULT NULL,
`AppDate` date DEFAULT NULL,
`Assignee` varchar(300) DEFAULT NULL,
`Inventors` varchar(1500) DEFAULT NULL,
`RelatedUSAppData` text,
`PrimaryExaminer` varchar(100) DEFAULT NULL,
`AssistantExaminer` varchar(100) DEFAULT NULL,
`AttorneyOrAgent` varchar(300) DEFAULT NULL,
`ReferencedBy` text,
`AssigneeName` varchar(150) DEFAULT NULL,
`AssigneeState` varchar(80) DEFAULT NULL,
`AssigneeCity` varchar(150) DEFAULT NULL,
`InventorsName` varchar(800) DEFAULT NULL,
`InventorsState` varchar(300) DEFAULT NULL,
`InventorsCity` varchar(800) DEFAULT NULL,
`Claims` mediumtext,
`Description` mediumtext,
`InsertionTime` datetime NOT NULL,
`LastUpdatedOn` datetime NOT NULL,
PRIMARY KEY (`patID`),
UNIQUE KEY `patID_UNIQUE` (`patID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
我应该怎么办?我有大约 20% 的数据(这意味着我将需要 350GB~ 空间)这里的性能影响是什么?我应该将表格分成几个 HD 上的几个表格吗?最后我将使用 sphinx 来索引和查询数据。