我想發送批量電子郵件給我的網站用戶,並且電子郵件將被髮送到允許每次說100k +個用戶。我想要實現的是保留我的mail()
函數調用的記錄,即一旦郵件發送給用戶,就在臨時表中爲該用戶添加條目。這有助於在條件允許的情況下,如果我的服務器崩潰,那麼我可以將電子郵件發送給其他用戶。需要爲IN語句優化MySQL查詢
這裏是我的問題:
我選擇從用戶表所在的記錄是NOT IN (select sent_ids from temp_table)
如果有很多發送ID的記錄,讓我們假設用戶總量的70%,那麼它將使查詢比較慢。
我能做些什麼來解決我的問題?
我看到大多數人喜歡加入,但我的同事不同意它。他寧願每天發送最多10封電子郵件,因此他認爲我們應該在用戶表中添加10列。因此,只要電子郵件發送給特定用戶,他的is_sent字段應該設置爲1用於電子郵件(當天的電子郵件號碼,假設電子郵件號碼爲1)。 您認爲這是比所有其他解決方案最快的方法嗎?我應該遵循或不遵守? –
這對我來說是一種糟糕的設計,我當然不會效仿。這強姦了恕我直言的數據庫設計模式。即使速度更快,它也會帶來很多其他難題和維護性問題,但這不值得。 –
他說IN的問題在於他遇到了服務器崩潰問題,因爲一旦記錄太長,查詢就會花費很長時間,服務器崩潰。我很困惑:s –