簡體   English   中英

重新設計一個自引用的mysql表

[英]Redesigning a self-referencing mysql table

我繼承了一個遺留應用程序,該應用程序利用自引用表來促進層次結構。 這將導致遞歸方法調用,從而產生“難聞的氣味”。

parent_id列引用同一表的主鍵,此處大約有2500萬條記錄:

+-------------+---------+------+-----+---------+----------------+
| Field       | Type    | Null | Key | Default | Extra          |
+-------------+---------+------+-----+---------+----------------+
| phase_id    | int(10) | NO   | PRI | NULL    | auto_increment |
| plat_id     | int(10) | YES  | MUL | NULL    |                |
| name        | text    | YES  |     | NULL    |                |
| parent_id   | int(10) | YES  | MUL | NULL    |                |
| plan_id     | int(10) | YES  | MUL | NULL    |                |
+-------------+---------+------+-----+---------+----------------+

mysql> show table status like 'ref'\G
*************************** 1. row ***************************
Name: phase
Engine: MyISAM
Version: 10
Row_format: Dynamic
Rows: 25223658
Avg_row_length: 20
Data_length: 509450960
Max_data_length: 281474976710655
Index_length: 1026267136
Data_free: 0
Auto_increment: 25238013

我對這種結構有一些疑問:

  • 實現自引用表通常是不好的做法嗎? 我可以想到的主要負面因素是,由於可能有X個子代,因此很難/不可能在單個查詢中獲得層次結構的最大深度。
  • 值得重新設計嗎? 擁有如此多的數據使移動數據變得更加困難。
  • 我有什么選擇? 我聽說過一些有關表分區的信息,但是不知道它是否適合我的方案。

任何指針將不勝感激ns

我們最終廢棄了現有的自引用表。 並創建了一個新表格來容納更簡單的模型。

感謝Sebas提供上述鏈接 那里有很多好處!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM