我正在使用mariadb。
video_count
我有一个单独的表来跟踪image_count
几个不同的站点。IE
type | enum('SITE1','SITE2','SITE3')
video_count | int(11)
image_count | int(11)
video_count
将存在于所有站点,但image_count
仅存在于SITE3
. 此外,SITE3 将是少数行。
那么以这种方式在一张表上排列数据是否有意义?我想查询所有行...但是如果知道我的 90% 的行将具有0
image_count 是多余且昂贵的,这是否会成为问题?
如果我能做类似的事情就完美了SELECT * from TABLE BUT DON't GET video_count WHERE type != 'SITE3'"
这甚至是 SQL 中可能的查询吗?或者现在为“SITE1...SITEN”创建单独的表是否有意义?泰!
我建议将 NULL 存储在
image_count
不适用的行的列中,因为该类型不需要它。NULL 不同于整数 0。InnoDB 不会在 NULL 的行中存储值。因此,将列 NULL 保留在不需要它的行上的开销非常低。每个可以为空的列的行标题中都存储了一些位,但无论您是否存储值,都需要该位。
10k 行对于 InnoDB 表来说很小。除非您需要在 Raspberry Pi 或类似的紧凑型平台上运行此数据库,否则我不会担心。
SQL 没有任何语法
SELECT * except-the-columns-I-don't-want
。如果使用SELECT *
,则表示所有列,包括那些为 NULL 的列。如果您想要列的子集,则必须命名所有您想要的列。