Mysql

為大多數行不存在的數據儲存列

  • May 27, 2022

我正在使用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% 的行將具有0image_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 的列。如果您想要列的子集,則必須命名所有您想要的列。

引用自:https://dba.stackexchange.com/questions/312680