我有一個MySQL數據庫,其中包含大量的文字,我從網站獲取數據,並將其插入到表中。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空間),這對性能有什麼影響?我應該把桌子分成幾個桌子上的幾張桌子嗎?我將使用sphinx來最終索引和查詢數據。
這不是表格結構,它是你擁有的數據量。你的表結構主要使用varchars和文本類型的列,它們通過存儲文本並使用尾部附加的1個字節(或2個字節)來記錄文本的大小。這意味着varchar(1500)與使用mediumtext列相同。另一件可能的問題是MyISAM如何處理數據存儲以及它如何分割表空間 - 我不是那裏的專家,但是如果你需要存儲大量文本,你的表結構不能被「優化」。 – 2012-07-12 09:05:10
大部分大塊文本都存儲在中文texttext列中,我可以在哪裏看到保存text \ mediumtext的文件?我應該考慮使用其他數據庫引擎嗎? – YSY 2012-07-12 10:14:30
[請參閱MyISAM內部](http://forge.mysql.com/wiki/MySQL_Internals_MyISAM)。 – 2012-07-12 10:42:32