今天做乙個業務需求的邏輯處理,需要對mysql全表進行遍歷,資料規模百萬級別,為方便描述,這張表就用 a 來代替吧
結合自己的思路和一些資料,在這裡記錄一下方案的進化史
一、直接遍歷拿出所有的資料
select * from a ;
這個肯定不用多說了,估計還沒拿完,記憶體就爆了,對這種數量級的表不現實
二、分頁式迴圈遍歷
select * from a limit 0,1000;select * from a limit 1000,1000。
在**中,迴圈地使用這種模式的sql去遍歷表,雖然可以實現,但顯然這種方式是沒法用到索引,越往後遍歷性能會越低。
三、帶索引鏈式遍歷
select * from a where id > 0 order by id limit 10000;select * from a where id > 10000 order by id limit 10000;
好,既然沒用到索引,那就帶上索引遍歷。
類似的查詢效果,由於where條件中的id欄位有索引,對於比較靠後的資料,查詢效能將會輕鬆提公升很多(有人說是百倍左右,我沒測試過就不說具體多少了)
那初步的優化方案就很容易想到了,id有索引,而且是自增的,就從id=1開始遍歷,結果集以id公升序排列,然後根據結果集最後一條資料的id,繼續下一次遍歷
四、id分割槽多執行緒遍歷
參考:共同學習,共同進步,若有補充,歡迎指出,謝謝!
原文:
mysql迴圈遍歷獲取 MySql多表迴圈遍歷更新
先給大家解釋解釋發表這篇博文的主要思想是 mysql資料庫中存在大量的表結構,而且這些表都存在乙個共同點,就是表中都有相同字段,比如id,name,city,adress,lat,lng。表中字段id,name,city,adress不允許為空,所以表中這幾個欄位的資料都是已經賦給實值的,而lat與...
迴圈遍歷獲取table中的td,tr
貼上頁面div電鰻 貝殼魚 炸彈 煙霧彈 雙倍卡 減速標放大鏡 遍歷table js 通過行列獲取 var tb document.getelementbyid tab table 的 id var rows tb.rows 獲取 所有行 for var i 0 ijs通過table標籤獲取 btn...
mysql游標遍歷迴圈 插入資料
begin declare no more record int default 0 declare insertcolumn varchar 18 declare cur record cursor for select insertparam from testtable declare con...