簡體   English   中英

通過連接提高MySQL嵌套選擇性能

[英]Improve MySQL nested select performance with join

我已經看到了許多示例,這些示例可通過聯接來改善MySQL嵌套選擇,但對於此查詢,我無法弄清楚:

SELECT * FROM messages WHERE answer = 'SuccessSubscribed' AND phone NOT IN 
         (SELECT phone FROM messages WHERE answer = 'SuccessUnSubscribed');

該查詢查找已訂閱但從未取消訂閱的人員。

表結構:

CREATE TABLE `messages` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`phone` varchar(12) COLLATE utf8_persian_ci NOT NULL,
`content` varchar(300) COLLATE utf8_persian_ci NOT NULL,
`flags` int(10) unsigned NOT NULL DEFAULT '0',
`answer` varchar(50) COLLATE utf8_persian_ci DEFAULT NULL,
....,
PRIMARY KEY (`id`),
....
) ENGINE=InnoDB CHARSET=utf8 COLLATE=utf8_persian_ci

可以使用帶有NULL檢查的LEFT JOIN來代替NOT IN

SELECT M1.*
FROM messages M1
LEFT JOIN messages M2 ON M2.phone = M1.phone AND M2.answer = 'SuccessUnSubscribed'
WHERE M1.answer = 'SuccessSubscribed' AND M2.phone IS NULL

暫無
暫無

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

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