Mysql
按類型儲存多個表與一個表
我想在一個表中儲存很多行,但我經常只想選擇其中一些行,具體取決於它們的類型。所以我可以只
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;