2012-10-14 113 views
0

我需要維護一個羣發電子郵件發件人的應用程序。最後一名程序員幹得不錯,但老闆覺得可以對數據庫處理進行一些優化。當競選結束後,報告會提供保存選定細分的選項。例如,我們發送50000封電子郵件,並且我們想要保存打開新聞簡報的人羣(2000年)。該工具現在創建了一個複製聯繫人的新段(使用INSERT),但我認爲我們可以通過保存每個聯繫人的ID。SQL IN語句的限制

我想知道如果保存與SQL IN語句的聯繫人會增加工具的性能,或者有另一種方法來執行此操作。喜歡的東西:

  1. 創建聯繫人的ID列表SELECT * FROM接觸

  2. SELECT * FROM接觸WHERE idContact IN(all_contacts_comma_separated) - >我要救 這

在此先感謝

PD:這是一個生產環境,所以我需要確保在作出任何更改之前:-(

+3

我建議在做任何事情之前在開發沙箱中鏡像生產環境。 – eggyal

+0

'例如,我們發送50000電子郵件'我真的希望這是完全非法和不可能 –

+0

嗨。這不是不可能的,我們只發送給雙重選擇的人,所以這不是非法的。然而,法律部分駐留在我的老闆身上,我認爲這已經足夠了......否則我會盡快更換工作:-D –

回答

1

您沒有說出當前打開電子郵件的人員列表所在的位置。如果它不在數據庫中,您將使用什麼代碼/流程來生成您的IN聲明列表?如果是在數據庫裏爲什麼不是JOIN你的表格得到的信息?

無論哪種方式,當列表中有2000個項目時,我不建議使用IN

它也可能是值得您閱讀以下內容:

SQL Server: JOIN vs IN vs EXISTS - the logical difference

它與SQL服務器編寫的主意(我不知道這一切直接應用到MySQL),但其概念是有趣的,您應該在改變您的生產環境之前執行測試,正如eggyal的評論所建議的那樣。

+0

感謝您的回覆。數據庫駐留在另一個具有競選結果的表中。從這裏,我們可以獲取我們需要的所有信息來執行報告。所以我認爲我可以在這張桌子上加入以獲取電子郵件。我將要求一個試生產環境來執行更改和測試結果。 –

+0

2000可能有點太多了,我會批量500-1000左右。您需要測試才能找到最佳尺寸。 –