Mysql
如何在 MariaDB 表中查找未使用的列
我的數據庫中有很多表,其中有許多列可能不會被使用,因為它們會隨著時間慢慢失去相關性,我需要找到這些列並從表中刪除這些列,是否有明確的方法來檢查列是否被使用?
MariaDB 10.3.8
如果您的表具有定義為具有
NULL
值的列,請執行以下命令:SELECT COUNT(given_column) FROM mytable;
這為您提供了不為 NULL
mytable
的行數。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 的建議涵蓋了儲存在列中的值,但它需要一些假設來推斷這些值對應於使用情況。
我認為確定這一點的唯一方法是以下兩種方法之一:
- 為每張表和每列製作一個電子表格。對您的客戶端應用程序進行徹底的程式碼審查。每次看到引用的表和列時,請在電子表格中將其標記為“正在使用”。完成程式碼審查後,沒有註釋的列將被刪除。
- 執行應用程序和數據庫的測試實例。實驗性地刪除您猜想可能未使用的列。測試應用程序的每個部分。如果您沒有收到任何錯誤,那麼顯然該列實際上是不需要的。