如果我有一個主鍵說id
和我做的關鍵,例如一個簡單的查詢,是否使用「限制1」加快對主鍵的查詢?
SELECT id FROM myTable WHERE id = X
它會找到一個行,然後停止尋找,因爲它是一個主鍵,或會是更好地通過使用LIMIT 1
告訴mysql限制其選擇?例如:
SELECT id FROM myTable WHERE id = X LIMIT 1
如果我有一個主鍵說id
和我做的關鍵,例如一個簡單的查詢,是否使用「限制1」加快對主鍵的查詢?
SELECT id FROM myTable WHERE id = X
它會找到一個行,然後停止尋找,因爲它是一個主鍵,或會是更好地通過使用LIMIT 1
告訴mysql限制其選擇?例如:
SELECT id FROM myTable WHERE id = X LIMIT 1
是的。這裏沒有必要進行表掃描:這是基於鍵的查找。匹配的行被找到,這是過程的結束。
酷感謝.... – cgweb87
使用「限制1」加快對主鍵的查詢嗎?是或否,你的答案建議「不」,但是說「是」。 – TarranJones
@TarranJones:我不明白你爲什麼認爲它表示「不」。 –
有沒有必要擔心這種「優化」。
只會提取一行 - 每個唯一的索引合同 - 並且數據庫能夠很快地找到所有的(1)行。它能夠做到這一點是因爲支持索引(或主鍵)的底層結構支持按值快速查找。沒有涉及表掃描。 (通常是B樹的一個變種,但它可能是基於哈希的,等等,我想智能查詢優化器也可以根據唯一的約束傳遞額外的提示,但我不'對此足夠了解。)
謝謝,我的數據庫擁有超過500,000行的唯一鍵,並且只是試圖加快性能。 – cgweb87
@ cgweb87您可以隨時運行測試。我懷疑「沒有變化」,但是如果你發現一個明顯的差異,那麼1)利潤2)編寫後續SO問題3)更多利潤:) – 2011-12-11 20:23:45
@ cgweb87不要忘記分析查詢計劃,以及測量掛鐘時間。 – 2011-12-11 20:27:43
你爲什麼不試試? –
我該如何嘗試?它總是隻返回1行,我想知道它是否在找到主鍵後停止全表掃描! – cgweb87
@ cgweb87:請確認我對您的問題所做的修改使其更加清晰,而不是進一步偏離您的意圖。 –