首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >垂直分区MySQL表

问垂直分区MySQL表
EN

Database Administration用户
提问于 2018-03-27 04:15:33
回答 1查看 226关注 0票数 0

我正在审查一个案例,其中200+列主要是varchar(100)。这些列来自多个外部数据源,如CRM /人口统计学数据等。我不能将它们保存在一个MySQL表中,因为列的数量在不断增加。

一般查询情况可能包含一个或多个垂直分区的列。

  • 垂直分割它们是个好主意吗?加入他们的查询?
  • 每个分区的大小应该是多少(列数)?以提高业绩。
  • 最佳的连接匹配条件是什么?

MySQL版本: 5.7

存储引擎: InnoDB

EN

回答 1

Database Administration用户

发布于 2018-03-27 07:31:52

我不认为有人能给出一些神奇的数字,比如可接受的列数,或者与工作负载过于紧密相关的信息,比如拆分表是个好主意。变量太多:现有列和索引的数量/类型、查询数量、每次查询读取多少列,等等。适当的测试会给你一个很好的答案。我们所能说的就是,是的,常识说,如果可能的话,这样的桌子应该分开。

但是,每个查询都需要从多个分区读取吗?每个新行都会在所有分区中有匹配吗?这可能会减慢您的应用程序。理想情况下,大多数查询只能从一个分区读取。因此,第一个建议是与开发人员检查是否可以重写一些查询,这样他们就可以读取更少的列--可能需要重写一些SELECT *。

你也会询问最佳的匹配条件。这里的答案很简单:按主键连接。所有匹配的行都应该具有相同的id。它应该是一个表上的AUTO_INCREMENT列。首先将新行插入到表中,然后以这种方式插入其他行:

代码语言:javascript
复制
INSERT INTO t1 (...) VALUES (...);
INSERT INTO t2 (id, ...) VALUES (LAST_INSERT_ID(), ...);
INSERT INTO t3 (id, ...) VALUES (LAST_INSERT_ID(), ...);

也不要添加外键,因为它们会减慢你的书写速度。

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

https://dba.stackexchange.com/questions/202360

复制
相关文章

相似问题

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