Mysql
為大多數行不存在的數據儲存列
我正在使用mariadb。
video_count
我有一個單獨的表來跟踪image_count
幾個不同的站點。IEtype | 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 的列。如果您想要列的子集,則必須命名所有您想要的列。