Mysql

mysql InnoDB 中有許多 NULL 列有害嗎?

  • March 31, 2016

當我探索 InnoDB 的聚集 B 樹索引系統時,我認為許多 NULL(或小)列的存在對 InnoDB 性能沒有顯著影響。

多餘的列的存在是否會降低 mysql 的性能?

PS我嘗試實際測試,但沒有顯著效果。但是,我認為應該在重載下進行比較。這就是我很想了解有關此問題的技術推理的原因。

我能看到的唯一危害是對大型表執行 COUNT 查詢。

對 InnoDB 表執行SELECT COUNT(*) FROM mytable操作應該會產生全表掃描。但是,想想 COUNT( ) 的實際作用。*代表一整行。COUNT( ) 可以確定是否存在非 NULL 列。最簡單的方法是確保 PRIMARY KEY 列是序號位置的第一列。根據定義,PRIMARY KEY 列始終為 NOT NULL。因此,SELECT COUNT(*) FROM mytable將與SELECT COUNT(1) FROM mytable.

我不會擔心列過多,因為 InnoDB 將數字上限設置為 1000。當然,恕我直言,表中有 20-30 列(無論儲存引擎如何)太高,這表明設計不佳(請求規範化) ) 或太大的列數據。

PostgreSQL 解決了擁有 TOAST 表的問題。TOAST 代表外部屬性儲存技術。它管理對於正常行儲存來說太大的列數據。

.ibdInnoDB 沒有像 TOAST 這樣的機制,所以我希望在文件或 ibdata1中存在某種行連結。儘管如此,NULL 列將阻止超大行數據的物理表現。任何人都可以忍受。

只要 InnoDB 表被正確索引,NULL 列就不會成為問題。此外,所有非唯一索引都有返回到聚集索引(又名 gen_clust_index)的內部 rowid 。因此,經過良好調整的查詢將始終通過聚集索引訪問數據。

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