首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL表设计/架构,表太大

MySQL表设计/架构,表太大
EN

Stack Overflow用户
提问于 2012-07-12 16:54:56
回答 1查看 280关注 0票数 1

我有一个包含大量文本的MySQL DB,我正在从网站获取数据并将其插入到表中。

我对数据库使用SSD硬盘(100 DB ),空间不足,我认为表结构中的某些东西使其太大,我无法预测所有列的大小,因此我对大多数字段使用varchar\ text \medium text。当我将所有数据插入数据库时,我会监视错误,当我发现某个字段对于我试图插入的数据来说太小时,我会增加该字段的大小(例如,从varchar(1000)到varchar(2000))。

到目前为止,我有大约1.8M~行,我认为我做错了什么。

这是我的表格的结构-

代码语言:javascript
复制
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%的数据(这意味着我将需要350 to ~空间),这对性能有什么影响?我应该把表分成几个硬盘上的几个表吗?最后,我将使用sphinx对数据进行索引和查询。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-12 17:03:07

所有非文本列值都存储在一个8KB的记录中(硬盘上不可分割的空间单位)。文本列值存储为指向外部数据块的指针。

这些类型的结构(非常面向文本)最好由NOSQL (不仅仅是SQL)数据库来处理,比如MongoDB。

但我怀疑,为了避免保存大量的文本,关于如何处理和组织数据,您可以做很多事情。

构建数据库以避免重复信息并允许轻松更新(在一个地方更新-随处可见)的过程称为规范化。

如果存储在那些大的VARCHAR中的数据(例如:发明者长度1500)是由多个数据元素构成的(例如:发明者的名字由coma分隔),那么您可以通过创建一个Inventors表并引用它来重新构造DB表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11448241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档