[英]Need to optimize MySQL query for IN statement
我想向我的站點用戶發送批量電子郵件,並且該電子郵件將一次發送給100k +用戶。 我要實現的是保留我的mail()
函數調用的記錄,即,一旦將郵件發送給用戶,就會在臨時表中為該用戶添加一個條目。 如果服務器崩潰,這可以為我提供條件,然后可以將電子郵件發送給其他用戶。
這是我的問題:
我從用戶表中選擇記錄NOT IN (select sent_ids from temp_table)
其中的記錄NOT IN (select sent_ids from temp_table)
如果發送的ID太多(例如,占總用戶的70%),則會使查詢相對緩慢。
我該怎么做才能解決我的問題?
看看mysql, docs中的EXIST
/ NOT EXISTS
優化。
它不應比其他變體慢,因為在大多數情況下,MySQL會盡可能優化IN子句(至少在以后的版本中)。 但是,您可以嘗試按ID左聯接臨時表,然后檢查send_id IS NULL以獲取尚未發送郵件的用戶。
兩種選擇:
聽起來像是外部聯接的工作:
SELECT * FROM users u
LEFT JOIN temp_table t
ON u.id = t.id
WHERE t.id IS NULL
這將列出所有尚未發送電子郵件的用戶。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.