0
是否有可能在重負載下對大表(可能有10億行)執行範圍掃描至獲取主鍵位於範圍內的所有行。主鍵是BIGINT
類型。除主鍵以外,行很短,只有另一個INT
字段。只有這種類型的查詢在此表上執行。獲取主鍵位於範圍內的行
無論如何優化這樣的查詢,或表?可能是我可以存儲始終排序的行,以便範圍掃描更容易?
是否有可能在大桌子上進行這樣的查詢並且表現良好?
是否有可能在重負載下對大表(可能有10億行)執行範圍掃描至獲取主鍵位於範圍內的所有行。主鍵是BIGINT
類型。除主鍵以外,行很短,只有另一個INT
字段。只有這種類型的查詢在此表上執行。獲取主鍵位於範圍內的行
無論如何優化這樣的查詢,或表?可能是我可以存儲始終排序的行,以便範圍掃描更容易?
是否有可能在大桌子上進行這樣的查詢並且表現良好?
主鍵列自動編入索引,因此訪問範圍應該很好。使用BETWEEN
條件:
select * from mytable
where id between ? and ?
當然,如果範圍大,性能將是緩慢的僅僅是因爲被返回的行數量巨大。另外,如果範圍的大小超過了一定的限制(優化器將決定,但通常是總行數的1/11),那麼索引將不會被使用,而是會完成一個完整的故事掃描,因爲它是實際上比使用索引要快,如果被訪問的行的百分比足夠大。
如果有疑問,請在查詢上運行EXPLAIN
以顯示如何完成訪問。如果它使用索引,那麼它的速度可能會很快。
不,我不想獲取整個範圍,我會限制它最多1000行(這是最大值和極小值)範圍將永遠不會覆蓋所有行的1/1000。排序行和會有助於表現? –
不要排序。只需在我的答案中使用查詢。 – Bohemian
謝謝。我認爲我的陳述有點含糊不清,我的意思是按照主鍵的順序在表中存儲行,所以MySQL的範圍掃描相當容易。 –