我想重寫查詢以獲得所有表的資料,目前我有12個表,其中包含完全相同的列名,但有不同的表名和內容。為了獲得所有的記錄,我目前正在像下面這樣聯合它們。
select ct.id, ct.code, ct.name, ct.created_date, ct.uped_date。
mt.id, mt.section, mt.description, mt.image_path
from client_1_tbl as ct
left outer join master_tbl as mt ON ct. = mt.client_id。
where ct.code in ('101'/span>,'102'/span>,'103'/span>)
UNION[/span]。
select ct.id,ct.code, ct.name, ct.created_date, ct.uped_date,
mt.id, mt.section, mt.description, mt.image_path
from client_2_tbl as ct
left outer join master_tbl as mt ON ct. = mt.client_id。
where ct.code in ('201'/span>,'202'/span>,'203'/span>)
UNION[/span]。
select ct.id, ct.code, ct.name, ct.created_date, ct.uped_date。
mt.id, mt.section, mt.description, mt.image_path
from client_3_tbl as ct
left outer join master_tbl as mt ON ct. = mt.client_id。
where ct.code in ('301'/span>,'302'/span>,'303'/span>)
這里我給出了我如何使用這些表的例子,正如你所看到的,我有一個主表并將其與客戶表連接起來,但由于client_1, client_2, client_3, ...等包含不同的表名,所以我只是聯合它們來獲得所有記錄。但是現在這些客戶表開始增加到12個客戶表,由于這個查詢需要這么多時間。
懇請讓我知道,是否有任何更好的方法來寫這個查詢。因為每個版本的客戶表都會不斷增加,我需要優化這個查詢,使其變化最小。
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
- 使用
UNION ALL,因為它幾乎總是比UNION表現得更好。 - 你可以對你的客戶資料進行子查詢,然后在一個單一的連接中連接你的主資料(這可能不會提高性能,但對你來說可能會更整潔)。
- 對于任何進一步的性能建議,你需要提供所有要求的資料、表定義、索引定義和執行計劃。
select
ct.id, ct.code, ct.[name], ct.created_date, ct.uped_date
from (
select ct.id, ct.code, ct.[name], ct.created_date, ct.uped_date。
from client_1_tbl as ct.
where ct.code in ('101'/span>,'102'/span>,'103'/span>)
--使用聯合所有以獲得更好的性能。
union all
select ct.id,ct.code, ct.[name], ct.created_date, ct.uped_date。
from client_2_tbl as ct.
where ct.code in ('201'/span>,'202'/span>,'203'/span>)
--等 ...)
)ct
-- 在這里加入以避免多重連接。
left outer join master_tbl as mt on ct. id = mt.client_id。
不過我應該指出,在大多數情況下,當你有一個多租戶資料庫時,你應該使用一個表,并在另一列中存盤客戶的所有者。這樣你就不會遇到這些擴展問題了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/311094.html
標籤:
上一篇:我怎樣才能改寫sql陳述句?
下一篇:一鍵切換所有開關
