2011-06-27 27 views
2

我使用3臺下面這裏列出:MySQL的比較需要太多的時間

CREATE TABLE `user` (
    `uid` int(10) NOT NULL AUTO_INCREMENT, 
    `kid` int(3) NOT NULL, 
    `Email` varchar(255) DEFAULT NULL, 
    `del` tinyint(1) DEFAULT '0', 
    PRIMARY KEY (`uid`), 
    KEY `kid` (`kid`), 
    KEY `email` (`Email`) 
) ENGINE=MyISA 

CREATE TABLE `blacklist_global` (
    `bgid` int(10) NOT NULL AUTO_INCREMENT, 
    `email` varchar(255) NOT NULL, 
    `kid` int(3) DEFAULT NULL, 
    `stmp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    PRIMARY KEY (`bgid`), 
    UNIQUE KEY `email` (`email`), 
    KEY `kid` (`kid`) 
) ENGINE=MyISAM 

CREATE TABLE `verteiler_user` (
    `vuid` int(10) NOT NULL AUTO_INCREMENT, 
    `uid` int(3) NOT NULL, 
    `vid` int(3) NOT NULL, 
    `del` int(11) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`vuid`), 
    KEY `uid` (`uid`) 
) ENGINE=MyISAM 

user每個條目也表verteiler_user。現在我想從delete用戶where user.uid = verteiler_user.uid and verteiler_user.vid=XX and user.uid = XXX

每個條目,以便ATM IM從PHP這樣做從表user獲取所有entrys,全部來自blacklist_global。 問題是,在黑名單我可以輸入*@heloooo.de所以我想刪除域helooo.de每個電子郵件,但它非常非常緩慢。

只有在mysql才能做到嗎?沒有php?或任何提示,這樣做更快?

回答

0

這可能會得到你所需要的。在生產數據上使用它之前先測試它。

DELETE FROM user WHERE uid = ? AND uid in (SELECT uid from verteiler_user WHERE vid = ?)

編輯基於評論:

DELETE FROM user WHERE uid IN (SELECT uid FROM blacklist_global WHERE email LIKE '%@somedomain.com')

+0

問題是,我不得不檢查的電子郵件地址,我想從用戶刪除所有,如果user.email是發EMAIL:[email protected]黑名單.email,但在blacklist.email可能是一個像*@bla.de通配符,所以我想從用戶刪除電子郵件像blaa .. – Roby

+0

@Roby我添加了一個基於您的評論的例子。 – datasage

+0

thx爲快速重播,但我不得不檢查角色是否喜歡@是*然後像電子郵件LIKE'%@somedomain.com那樣做,如果不是隻檢查完整的電子郵件,你明白我的意思嗎? – Roby