2011-12-11 25 views
9

如果我有一個主鍵說id和我做的關鍵,例如一個簡單的查詢,是否使用「限制1」加快對主鍵的查詢?

SELECT id FROM myTable WHERE id = X 

它會找到一個行,然後停止尋找,因爲它是一個主鍵,或會是更好地通過使用LIMIT 1告訴mysql限制其選擇?例如:

SELECT id FROM myTable WHERE id = X LIMIT 1 
+0

你爲什麼不試試? –

+1

我該如何嘗試?它總是隻返回1行,我想知道它是否在找到主鍵後停止全表掃描! – cgweb87

+1

@ cgweb87:請確認我對您的問題所做的修改使其更加清晰,而不是進一步偏離您的意圖。 –

回答

7

是的。這裏沒有必要進行表掃描:這是基於鍵的查找。匹配的行被找到,這是過程的結束。

+1

酷感謝.... – cgweb87

+0

使用「限制1」加快對主鍵的查詢嗎?是或否,你的答案建議「不」,但是說「是」。 – TarranJones

+0

@TarranJones:我不明白你爲什麼認爲它表示「不」。 –

3

有沒有必要擔心這種「優化」。

只會提取一行 - 每個唯一的索引合同 - 並且數據庫能夠很快地找到所有的(1)行。它能夠做到這一點是因爲支持索引(或主鍵)的底層結構支持按值快速查找。沒有涉及表掃描。 (通常是B樹的一個變種,但它可能是基於哈希的,等等,我想智能查詢優化器也可以根據唯一的約束傳遞額外的提示,但我不'對此足夠了解。)

+0

謝謝,我的數據庫擁有超過500,000行的唯一鍵,並且只是試圖加快性能。 – cgweb87

+0

@ cgweb87您可以隨時運行測試。我懷疑「沒有變化」,但是如果你發現一個明顯的差異,那麼1)利潤2)編寫後續SO問題3)更多利潤:) – 2011-12-11 20:23:45

+0

@ cgweb87不要忘記分析查詢計劃,以及測量掛鐘時間。 – 2011-12-11 20:27:43