有一个MySQL表:
CREATE TABLE `variables` (
`name` VARCHAR(50) NOT NULL,
`value` VARCHAR(250) NOT NULL,
PRIMARY KEY (`name`)
) ENGINE=InnoDB CHARSET=utf8mb4;
SELECT 只有一种:按键选择一行。
value
通常很短(大多数情况下少于 10 个字符)。
但在新的条件下,这种情况非常罕见(<1%) it can be long (about 10 Kb).
How should I change the table?
据我了解,在这种情况下,
VARCHAR(15000)
比TEXT
更有效。
但这个解决方案怎么样?
CREATE TABLE `variables` (
`name` VARCHAR(50) NOT NULL,
`value` VARCHAR(250) NULL,
`long_value` TEXT NULL,
PRIMARY KEY (`name`)
) ENGINE=InnoDB CHARSET=utf8mb4;
如果值很短,则将其保存到
value
。
长值保存到long_value
。
在
SELECT value,long_value FROM variables WHERE name=?
之后检查哪一列不为NULL。
或者只是SELECT IFNULL(value, long_value) AS value WHERE variables WHERE name=?
。
使用 VARCHAR(15000) 作为数据。 DB 中占用的空间是实际数据长度 + 几个字节的开销。这对于短字符串和长字符串都适用。
将数据分成两个字段只会增加应用程序的复杂性,并且实际上浪费空间。