Mysql

按類型儲存多個表與一個表

  • November 9, 2020

我想在一個表中儲存很多行,但我經常只想選擇其中一些行,具體取決於它們的類型。所以我可以只type為每一行添加一列,但是,如果我只想選擇一種類型的行,我將不得不進行查詢SELECT * FROM MyTable WHERE type = 1,例如。但這是否意味著 DBMS 必須獲取所有表,即使只有幾行具有我想要的類型?

每種類型都有一個表格會更好嗎,這樣我就可以SELECT * FROM MyTableType1,而不必使用WHERE?

只要所有數據(大致)具有相同的屬性,唯一的區別是type,將它們儲存在一個表中就可以了。

為了使您的查詢更快,請在type. 然後可能會發生兩件事:

  • 很少有足夠的行type可以進行索引掃描(或 PostgreSQL 中的點陣圖索引掃描)
  • 這種type情況經常發生,以至於 PostgreSQL 選擇順序掃描

在這兩種情況下,您都不會比使用許多小桌子慢很多。

最終決定可能取決於表的數量(在數據庫中有 10000 個表並不是很有趣)和您擁有的查詢類型:

  • 以下可以是帶參數的靜態查詢:
SELECT ... FROM mytable WHERE type = 'type1';

而以下要求您為每個查詢編寫一個 SQL 語句:

SELECT ... FROM mytable_type1;
  • 如果你想一次查詢幾種類型,最好寫
SELECT ... FROM mytable WHERE type IN ('type1', 'type2', 'type3');

而不是寫

SELECT ... FROM mytable_type1
UNION ALL
SELECT ... FROM mytable_type2
UNION ALL
SELECT ... FROM mytable_type3;

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