2014-10-22 126 views
0

我有一個非常簡單的問題。 我想知道某個數據庫行是否存在。MySQL SELECT 1 vs SELECT`field_id` AND COUNT 1 vs COUNT(*)or COUNT(`field_id`)性能明智

我一般用:

SELECT 1 FROM `my_table` WHERE `field_x` = 'something' 

然後我獲取結果與:

$row = self::$QueryObject->fetch(); 

,並檢查是否任何結果:

if(isset($row[1]) === true){ 
    return(true); 
} 

你可以做到這一點也:

COUNT 1 FROM `my_table` WHERE `field_x` = 'something' 

而且類似COUNT * FROM MY_TABLE and COUNT field_id FROM`MY_TABLE

但我想知道..請問這個涉及到表現?

是否有任何缺點使用SELECT 1COUNT 1? 我的感覺是說選擇INTEGER 1意味着最低的負載。

但這是真的嗎?

任何人都可以啓發我嗎?

回答

2

其實你所有的解決方案都不是最理想的:)你對你的查詢所做的事情就是讀取每行都有的東西,即使你添加了limit。像這樣做:

SELECT EXISTS (SELECT 1 FROM `my_table` WHERE `field_x` = 'something'); 

EXISTS返回1,如果事情被發現,否則爲0。一旦找到條目,它就會停止搜索。您在子查詢中選擇的內容無關緊要,您甚至可以選擇null

也請記住,COUNT(*)COUNT(1)COUNT(column_name)有很大不同。 COUNT(*)計數每一行,而COUNT(column_name)只計算不是null的行。

0

如果將LIMIT 1添加到查詢的末尾,那麼SELECT比COUNT的效果更好,尤其是當您有一個大表時。

+0

仍然不是最理想的:)隨時查看我的答案。 – fancyPants 2014-10-22 07:02:43