我有一个包含大约 150 个字段的 MySQL Barracuda 表,其中大部分是 TEXT 类型。
如果我想连续存储超过 65,535 个字符,是否可以使用亚马逊的 AWS 数据库来实现?如果是这样,哪种数据库?数据系统?
我正在使用一个半 VPS 类的托管公司,它有一个连接到这个数据库的 vanilla PHP 应用程序。是否可以只将数据库迁移到 AWS 并让应用程序在我的托管公司上运行?(我应该能够从主机的 PHP 应用程序连接到这个 AWS 数据库。
我有一个包含大约 150 个字段的 MySQL Barracuda 表,其中大部分是 TEXT 类型。
如果我想连续存储超过 65,535 个字符,是否可以使用亚马逊的 AWS 数据库来实现?如果是这样,哪种数据库?数据系统?
我正在使用一个半 VPS 类的托管公司,它有一个连接到这个数据库的 vanilla PHP 应用程序。是否可以只将数据库迁移到 AWS 并让应用程序在我的托管公司上运行?(我应该能够从主机的 PHP 应用程序连接到这个 AWS 数据库。
(针对 Q1)
对于膨胀的列,有许多解决方法。让我们来解决这个问题。
桌子的是
ROW_FORMAT
什么?DYNAMIC
并COMPACT
以不同的方式工作。他们都需要
TEXT
吗?或者有些可以VARCHAR
有低限制吗?(例如:name TEXT
-->name VARCHAR(60)
)考虑“垂直分区”。这是将一个表拆分为 2 个表的地方——在每个表中放置一些列。他们会有相同的
PRIMARY KEY
(除了不是两者都是AUTO_INCREMENT
)。是否有任何列具有重复值?如果是这样,请考虑标准化。(例如,
country TEXT
->country_code CHAR(2) CHARACTER SET ascii
具有“US”、“ES”、“UK”、“IN”等值。)你有跨列展开数组吗?这是一个禁忌。将那组列转换为相关表中的行。(例如家庭电话、工作电话、传真、手机。)
请提供
SHOW CREATE TABLE
实际的列名;我们可能会有更多提示。(我上面的一些建议可能非常明显。)查看架构后...
我看到一堆听起来像钱或其他数字内容的列,但在
VARCHAR(25)
; 考虑更改为INT
或其他一些数字数据类型TEXT
我看到每个和大约有 80 个VARCHAR
。这确实强调了 InnoDB 中的一些内置限制。但它们可以而且需要解决:计划 A:垂直分区——将 FR、COP、PP、Customer 等分成几个额外的表。用于
JOIN
重新收集数据。B 计划:将大部分列放入一个大的
JSON
文本列中。或者可能一种用于 FR,一种用于客户等。大多数应用程序语言都可以轻松解析 JSON。由于您只有一个索引(on
id
),我猜没有搜索表的要求?一些其他的列,比如 userID 和 name,应该保留在它们自己的列中,并可能建立索引。