簡體   English   中英

SQL插入並選擇多個列?

[英]SQL Insert into and Select multiple columns?

所以我有一個看起來像這樣的表:

通訊:(已撥打電話)

Timestamp            FromIDNumber ToIDNumber GeneralLocation 
2012-03-02 09:02:30  878          674        Grasslands 
2012-03-02 11:30:01  456          213        Tundra 
2012-03-02 07:02:12  789          654        Mountains
2012-03-02 08:06:08  458          789        Tundra 

我想創建一個具有所有不同的FromIDNumberToIDNumber的新表。

這就是它的SQL Fiddle

這有效:

INSERT INTO CommIDTemp (`ID`)
SELECT DISTINCT Communication.FromIDNumber
FROM Communication
UNION DISTINCT 
SELECT DISTINCT Communication.ToIDNumber
FROM Communication;

我得到:

 ID  
 878
 456
 789
 674
 213
 654
 365

但是我想知道是否有更有效的方法,因為我擁有的數據集有數百萬條線,而我對UNION DISTINCT的性能一無所知。

我最初嘗試過類似

INSERT INTO CommIDTemp (`ID`) 
SELECT DISTINCT Communication.FromIDNumber
AND Communication.ToIDNumber 
FROM Communication; 

但這沒有用...還有其他方法可以更有效地做到這一點嗎? 我對SQL還是很陌生,所以任何幫助將不勝感激,謝謝!!

性能主要取決於表的索引方式。 我看不到一種一次性完成所有操作的方法,因此我建議在FromIDNumber和ToIDNumber上使用單獨的索引。 即使在很多行中,這也應該使您的聯合中的每個語句都非常快。

您可以僅使用一個DISTINCT語句來加快此過程。 每個DISTINCT需要一個排序/臨時表。 您可以從每個語句中刪除DISTINCT ,而UNION DISTINCT將確保您獲得不同的值。

INSERT INTO CommIDTemp (`ID`)
SELECT Communication.FromIDNumber
FROM Communication
UNION DISTINCT 
SELECT Communication.ToIDNumber
FROM Communication;

旁注: UNION ALLUNION DISTINCT快,但根據您的需求,您可以使用UNION DISTINCT ,可以將其寫為UNION

第一件事:我沒有使用這張大桌子的經驗。 因此,您必須自己測試以下提示以了解它們是否確實在您的情況下起作用:

1.在源表中創建索引

確保FromIDNumberToIDNumber列均具有索引,即

ALTER TABLE Communication ADD INDEX (FromIDNumber);
ALTER TABLE Communication ADD INDEX (ToIDNumber);

2.嘗試刪除DISTINCT

我找不到適合您的示例的更快查詢,盡管您可以嘗試使用DISTINCT關鍵字進行查詢-使用UNION根據定義僅返回不同的值。 因此,此SQL給我們提供與您當前查詢相同的結果:

INSERT INTO CommIDTemp (`ID`)
SELECT FromIDNumber FROM Communication
UNION 
SELECT ToIDNumberFROM Communication;

3.在臨時表中使用主鍵

還可以通過將CommIDTemp.ID列設置為主鍵並使用INSERT IGNORE嘗試另一種方法-如果您要頻繁更新表而不刪除內容,則此方法特別有用:

CREATE TABLE CommIDTemp (ID INT PRIMARY KEY);

INSERT IGNORE INTO CommIDTemp (`ID`)
SELECT FromIDNumber FROM Communication
UNION
SELECT ToIDNumber FROM Communication;

暫無
暫無

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

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