2013-08-23 47 views
0

是否有可能在重負載下對大表(可能有10億行)執行範圍掃描至獲取主鍵位於範圍內的所有行。主鍵是BIGINT類型。除主鍵以外,行很短,只有另一個INT字段。只有這種類型的查詢在此表上執行。獲取主鍵位於範圍內的行

無論如何優化這樣的查詢,或表?可能是我可以存儲始終排序的行,以便範圍掃描更容易?

是否有可能在大桌子上進行這樣的查詢並且表現良好?

回答

1

主鍵列自動編入索引,因此訪問範圍應該很好。使用BETWEEN條件:

select * from mytable 
where id between ? and ? 

當然,如果範圍大,性能將是緩慢的僅僅是因爲被返回的行數量巨大。另外,如果範圍的大小超過了一定的限制(優化器將決定,但通常是總行數的1/11),那麼索引將不會被使用,而是會完成一個完整的故事掃描,因爲它是實際上比使用索引要快,如果被訪問的行的百分比足夠大。

如果有疑問,請在查詢上運行EXPLAIN以顯示如何完成訪問。如果它使用索引,那麼它的速度可能會很快。

+0

不,我不想獲取整個範圍,我會限制它最多1000行(這是最大值和極小值)範圍將永遠不會覆蓋所有行的1/1000。排序行和會有助於表現? –

+1

不要排序。只需在我的答案中使用查詢。 – Bohemian

+0

謝謝。我認爲我的陳述有點含糊不清,我的意思是按照主鍵的順序在表中存儲行,所以MySQL的範圍掃描相當容易。 –