簡體   English   中英

可以在單個表中包含所有相關列嗎? 多表選擇查詢會影響性能嗎?

[英]Is it okay to have all related columns in single table? Can select query for multiple table affect performance?

我設計了我的數據庫,我想知道是否可以在單個表中包含所有相關列,但是,我擔心所有列不會同時填充。 隨着結果的獲得或過程的變化,它們將被填充。 我可以有兩個選擇。

選項 1 :最初我為該單個表運行插入查詢,它為與進程 1 相關的列(以及其他列中的空值)插入一條記錄,然后更新同一記錄的查詢以將該空值替換為相關列的實際值處理 2。

選項 2:有兩個表(用於進程 1 和 2)並在進程進行時插入記錄數據(將它們與主鍵鏈接)。

插入數據時哪個選項具有更好的性能? 在一張表中插入+更新或在兩張表中插入。 列高度相關。

另外,我不確定......如果從同一個表中選擇會更快,還是從兩個表中選擇或者是相同的。 我將需要非常頻繁地訪問過程 1 和 2 的數據。

哪個選項是好的,性能方面? 我正在使用 MySQL。

從性能的角度來看,單表是最好的選擇。 要從兩個不同的表中獲取數據需要連接,這會降低性能。 但是,這一切都取決於表中的數據使用情況,如數據。 有時,為了提高性能,非規范化是最好的選擇。

從更好的組織角度來看,最好將數據拆分為兩個表。 它指示更新表的數據類型。 或者更確切地說是表的目的。

INSERT ON DUPLICATE KEY UPDATE 或 REPLACE 插入一張表比兩次插入快。 從一個表中 SELECT 比從帶有連接的兩個表中 SELECT 快,即使該連接優化得很好。 因此,如果您的應用程序始終訪問記錄中的所有數據,則您應該擁有一張表。

但是,如果您的應用程序通常只訪問記錄的一小部分,並且您的讀取比寫入頻繁得多(一種非常常見的情況),那么您最好將記錄拆分為兩個表,因為您的常見情況(讀取字段的一小部分)將隨着數據大小的增長而顯着改善 - 足以抵消不太頻繁的寫入和完整記錄讀取的額外開銷。

當整個數據集的大小超過可能被緩存的物理內存量時,這將特別重要。 然后在兩個表場景中,您仍然可以增長 10 倍,並且您的常見情況 - 小列子集訪問 - 仍然主要從 RAM 讀取,而在單記錄場景中,您甚至已經開始從磁盤讀取當您只需要幾列從而導致性能差異為 1000 左右時。

暫無
暫無

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

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