2011-06-10 71 views
7

我不得不檢查一個值(字符串)是否在我的數據庫中。mysql的速度mysql_num_rows與查詢限制1

目前,我做了

select a.email,b.vuid from user a, verteiler_user b where a.email=\''.$email.'\' and a.kid=' . $kid.' and b.vid=' . $vid . ' and a.uid = b.uid

與一個mysql_num_rows查詢,然後檢查if >=1

但它是更快地做一個查詢與限制1; ?並檢查一行是否回來?

回答

7

是的。運行limit 1查詢會更快。如果你所做的只是檢查一行的存在,爲什麼還要返回所有的列?只需選擇1。這將會(可以忽略)更快。順便說一句:你的代碼看起來容易受到SQL注入攻擊。考慮用mysql_real_escape_string()或類似的功能消毒查詢的動態部分。

+0

@Roby:你接受了這個答案,但隨後接受的吧。爲什麼?你需要任何額外的澄清? – Asaph 2011-06-10 16:22:32

4

LIMIT 1將會有更好的表現,因爲當LIMIT得到滿足時它會停止匹配。

如果您只希望有1行,請將LIMIT 1添加到您的查詢中。

此外,如果您只查詢查詢中是否存在該字符串,則不需要在查詢中使用SELECT的列名稱。只需使用SELECT 1...即可。

0

你可以嘗試:

select count(*) from user a, verteiler_user b 
    where a.email=\''.$email.'\' and a.kid=' . $kid.' and b.vid=' . $vid . ' and a.uid = b.uid 

,並通過獲取計數:

$row=mysql_fetch_array(...); 
if ($row[0] > 0) // is there a hit? 
    ...