2013-08-16 43 views
2

我有超過10K的記錄表中​​的t1具有列uid
我有5條與uid='xyz'
現在這接近了2個比較好SELECT * VS SELECT * LIMIT(性能)

SELECT * FROM t1 WHERE uid='xyz'; 

OR

SELECT * FROM t1 WHERE uid='xyz' LIMIT 5; 

* 只有5條記錄與uid作爲XYZ *

+4

避免''如果你關心性能 – bansi

+0

你,當你運行的每個查詢看到什麼? – BWS

+0

這取決於。你打算使用所有的記錄,還是隻使用前五個? – cdhowie

回答

4

一般情況下,你使用limitorder by條款。否則,結果是任意的,可能無法重複。

如果你想要的確切記錄,然後使用limit 5。如果你想要所有的記錄,那麼不要使用限制。如果兩者都返回相同的數據,那麼兩者的表現應該非常非常相似。

+0

我正在考慮將5個結果置於頂部的可能情況。第一個查詢是否會搜索整個表格,第二個查詢將在LIMIT子句滿足時立即停止搜索? –

+0

只要找到所需的行數就會停止。 – Vatev

+1

@GauravSharma當你沒有任何東西時,「頂部」是什麼意思? – Carsten

1

Asumming,因爲你解釋了,有(絕對肯定)5行如uid='xyz'

  • 兩個語句將執行幾乎完全一樣,如果因爲MySQL在uid指數會很容易「看到」只有5行要檢查。
  • 如果您沒有uid索引,LIMIT版本將表現更好,因爲它會告訴MySQL在匹配行之後停止搜索 - 避免花費時間檢查其餘行。
0

另一個理由不使用限制是,只有5個記錄了。一年後可能會有17年。