Mysql

如何在 MariaDB 表中查找未使用的列

  • March 9, 2021

我的數據庫中有很多表,其中有許多列可能不會被使用,因為它們會隨著時間慢慢失去相關性,我需要找到這些列並從表中刪除這些列,是否有明確的方法來檢查列是否被使用?

MariaDB 10.3.8

如果您的表具有定義為具有NULL值的列,請執行以下命令:

SELECT COUNT(given_column) FROM mytable;

這為您提供了不為 NULLmytable的行數。given_column如果結果返回為零 (0),則該列不會填充任何內容。您可以刪除該列ALTER TABLE mytable DROP COLUMN given_column;

如果您的表的列定義為DEFAULT <some-value>,請執行此

SELECT COUNT(DISTINCT given_column) DistinctCount FROM mytable;

如果返回為 1,您很可能也刪除此列。

如果 DistinctCount > 1 並且您想查看該細分,請執行此

SELECT IFNULL(given_column,'Total Rows') ColumnsValues,COUNT(1) rowcount
FROM mytable GROUP BY given_column WITH ROLLUP;

這些查詢應該給你一個可以刪除的好主意。

警告:請確保given_column在刪除列之前從未在原始碼中引用您的內容

我們沒有每列的使用統計資訊。userstat 外掛有表使用和索引使用統計。

@RolandoMySQLDBA 的建議涵蓋了儲存在列中的值,但它需要一些假設來推斷這些值對應於使用情況。

我認為確定這一點的唯一方法是以下兩種方法之一:

  • 為每張表和每列製作一個電子表格。對您的客戶端應用程序進行徹底的程式碼審查。每次看到引用的表和列時,請在電子表格中將其標記為“正在使用”。完成程式碼審查後,沒有註釋的列將被刪除。
  • 執行應用程序和數據庫的測試實例。實驗性地刪除您猜想可能未使用的列。測試應用程序的每個部分。如果您沒有收到任何錯誤,那麼顯然該列實際上是不需要的。

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