2013-01-25 44 views

回答

5

當然 - 只需使用LIKE操作。

SELECT email FROM Persons 
WHERE email LIKE '%gmail.com' 
+0

它伎倆,謝謝。 – Matt

+0

沒問題。隨意標註[這個答案所接受和正確的(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work),但我建議你看一看的來自愛神的回答也是如此。當您擁有龐大的數據庫並尋找性能時,他的解決方案比通配符搜索更快。對於小型數據庫/訪問者不多(或者「從數據庫中開發/提取數據的」最快方式「),通配符搜索就足夠了。 – MarcoK

0

您需要使用LIKE MYSQL CLAUSE

SELECT * FROM email_table WHERE email LIKE "%gmail.com"
+0

解釋反對票.. –

+0

對我來說,沒有一起工作的' =」。 – Matt

+0

哦,我的壞我沒有意識到我加了= ... +1爲你。 –

1

建議您不要進行通配符搜索。
這是因爲MySQL不能使用索引來固定選擇查詢。
特別是你提到你有很多的數據庫中的電子郵件。

或者,你可以使用一個額外的領域,如hostname存儲僅僅只有主機名。
當然建立一個索引。

如果你需要搜索電子郵件gmail.com
那麼你可以做直字符串比較

SELECT email FROM Persons 
WHERE hostname='gmail.com'; 

由於直串比較好的隊友到MySQL索引,查詢將得到優化。

+0

正如我評論我的回答,這個答案確實**是一個更好的解決方案比尋找速度/性能通配符搜索。 – MarcoK

1

由於ajreal points out,MySQL不能使用索引在一般情況下,以優化LIKE查詢。然而,在尾隨通配符其中唯一%是在模式(實際上是「打頭的」查詢)的最末端的特定情況下,優化器可以做到使用索引加快查詢的一個好工作。

因此,如果你要添加額外的索引列存儲在反向的電子郵件地址,你可以有效地查詢

SELECT email FROM xyz WHERE reverse_email LIKE '[email protected]%` 

找到所有的Gmail地址,或LIKE 'ku.%下英國域等所有地址你可以讓數據庫保持此列最新您使用觸發器的,因此它不會影響現有的更新代碼

CREATE TRIGGER emailinsert BEFORE INSERT ON xyz 
FOR EACH ROW SET NEW.reverse_email = REVERSE(NEW.email); 

CREATE TRIGGER emailupdate BEFORE UPDATE ON xyz 
FOR EACH ROW SET NEW.reverse_email = REVERSE(NEW.email);