mysql分頁丟資料的分析
1 有問題的程式碼
CleverCode發現在mysql有分頁丟失資料的問題。如下面的程式碼,system_user表有400萬行資料,這時候需要把這張表裡面的所有的userid取出來。這時候只能分頁取,一次取2萬。
//系統使用者表(400萬行的資料) $systemUserTable = new systemUserTable(); // 每次取20000 $pageSize = 20000; for($curPage = 1;; $curPage++) { $sql = "select userid from system_user order by userid asc limit " . (($curPage - 1) * $pageSize) . "," . $pageSize; //取資料 $rows = $systemUserTable->fetchAll($sql); // 沒有資料了,結束 if (empty($rows)) { break; } // 遍歷資料 foreach ( $rows as $key => $val ) { $userid = $val['userid']; echo $userid."\r\n"; } }
2 問題分析
1)假如system_user只有10行資料(u1,u2,u3,u4,u5,u6,u7,u8,u9,u10)。2) 這時候每次取5行。分2兩次取。
3)正常情況第一頁取(u1,u2,u3,u4,u5),正常情況第二頁取(u6,u7,u8,u9,u10)。
4)如果在第一頁去完,第二頁取之前的時間間隙裡面。u2,u3被刪除了。
5)那麼第二頁取的時候。資料變成了(u1,u4,u5,u6,u7,u8,u9,u10)。
6)那麼取出來第二頁的資料就變成了(u8,u9,u10)。
7)u6,u7被丟失了。
3 解決方案
每次取的時候where帶著最大偏移量。如下面的程式碼。$systemUserTable = new systemUserTable(); // 每次取20000 $pageSize = 20000; // 每頁最大編號 $pageMaxId = 0; while ( 1 ) { $sql = "select userid from system_user where userid > ${pageMaxId} order by userid asc limit " . $pageSize; //取資料 $rows = $fyHouse->fetchAll($sql); // 沒有資料,結束 if (empty($rows)) { break; } // 遍歷資料 foreach ( $rows as $key => $val ) { $userid = $val['userid']; // 記錄當前最大分頁編號 if ($userid > $pageMaxId) { $pageMaxId = $userid; } echo $userid."\r\n"; } }
過程分析:
1)system_user只有10行資料(u1,u2,u3,u4,u5,u6,u7,u8,u9,u10)。
2) 第一次取,最大偏移量0,limit 5;則取出(u1,u2,u3,u4,u5)。記錄最大的偏移量u5的值。
4)如果在第一頁去完,第二頁取之前的時間間隙裡面。u2,u3被刪除了。
5)那麼第二頁取的時候。資料變成了(u1,u4,u5,u6,u7,u8,u9,u10)。
3)第二次取,最大偏移量u5,limit 5;則取出(u6,u7,u8,u9,u10)。記錄最大的偏移量u10的值。
相關推薦
mysql分頁丟資料的分析
1 有問題的程式碼 CleverCode發現在mysql有分頁丟失資料的問題。如下面的程式碼,system_user表有400萬行資料,這時候需要把這張表裡面的所有的userid取出來。這時候只能分頁取,一次取2萬。 //系統使用者表(400萬行的資料) $systemUs
PHP+MySQL分頁顯示示例分析
moc dwl _array t-sql 4g+ scw zax d+ ffi Web開發是今後分布式程式開發的主流,通常的web開發都要涉及到與數據庫打交道,客戶端從服務器端讀取通常都是以分頁的形式來顯示,一頁一頁的閱讀起來既方便又美觀。所以說寫分頁程序是web開發的一個
Mybatis+MySQL動態分頁查詢資料經典案例(含程式碼以及測試)
最近在用Mybatis做專案的時候遇到了不少問題,今天我就在這和大家分享一下,稀稀拉拉的研究了兩天,終於搞好了! 開發人員:1111 開發軟體:Myeclipse 用到的框架技術:Mybatis 資料庫:MySql
Mybatis+mysql動態分頁查詢資料案例——配置對映檔案(HouseDaoMapper.xml)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/myba
mysql分頁加排序資料重複問題解決方案
前言 又一次我給商品資料分頁並按照權重欄位排序,結果出現了資料重複問題,第一頁資料和第二頁資料有重複 其實,這個問題很簡單,如果你有仔細閱讀官檔的話。~^_^~ 我們先來看看官檔是怎麼說的: If multiple rows have identical val
海量分頁的簡單分析
elk mic als emc usb won tm4 pop iap 此文僅個人理解,不到之處望指出 提出:easyui的datagrid組件有海量分頁的內容,通過查詢數據庫的所有數據在表格進行分頁瀏覽,因為數據量多,也叫海量分頁, 網
MySQL分頁優化中的“INNER JOIN方式優化分頁算法”到底在什麽情況下會生效?
表結構 files key 效率 ref 兩個 ges 參考 如果 本文出處:http://www.cnblogs.com/wy123/p/7003157.html 最近無意間看到一個MySQL分頁優化的測試案例,並沒有非常具體地說明測試場景的情況下,給出了
Mysql分頁處理(PageHelper)
展示 文件中 感覺 但是 pre 模糊查詢 map art lec 第一次做分頁處理(完全不知道分頁處理到底要做成什麽樣?) 理解:其實就是前臺頁面通過傳遞不同的參數{1.查詢的條件。2.查詢頁數(pageNum),3每頁展現的條數(pageSize)},之後我們(只做後臺
SpringMVC+Mybatis實現的Mysql分頁數據查詢
space round nbsp sub hid append app return utf 周末這天手癢,正好沒事幹,想著寫一個分頁的例子出來給大家分享一下。 這個案例分前端和後臺兩部分,前端使用面向對象的方式寫的,裏面用到了一些回調函數和事件代理,有興趣的朋友可
php+Mysql分頁 類和引用詳解
echo padding 數字 進行 else if sub var min func 一下內容為專用於分頁的類以及具體的方法和解析。<?php class Page { private $total;
MySQL分頁查詢優化
插入 hist shel 使用範圍 表優化 方便 歷史 生成器 速度 當需要從數據庫查詢的表有上萬條記錄的時候,一次性查詢所有結果會變得很慢,特別是隨著數據量的增加特別明顯,這時需要使用分頁查詢。對於數據庫分頁查詢,也有很多種方法和優化的點。下面簡單說一下我知道的一些方法。
Mysql分頁優化
mce 及其 過大 order by 意義 可能 就是 處理 con 在mysql中limit可以實現快速分頁,但是如果數據到了幾百萬時我們的limit必須優化才能有效的合理的實現分頁了,否則可能卡死你的服務器。當一個數據表中有幾百萬條數據的時候,就成問題了! 例
MySQL 分頁優化
明顯 並不是 sql log family soft blog offset device MySQL 用 LIMIT offset, length 進行分頁。但當表記錄數很大,會發現大頁數的查詢時間明顯比小頁數的查詢時間大。 MySQL並不是跳過 offset 行,而是取
mysql分頁
mysql分頁1.分頁的概念分頁就是將數據以多頁展示出來,使用分頁的目的是為了提高用戶的體驗2.分頁的分類:物理分頁和邏輯分頁物理分頁:物理分頁就是數據庫本身提供了分頁方式,如mysql的limit,好處是效率高,不好的地方就是不同數據庫有不同的搞法。邏輯分頁:邏輯分頁利用遊標分頁,好處是所有數據庫都統一,壞
mysql分頁性能
div limit 數據 class 記錄 sql分頁 IT 索引 userinfo - select * from userinfo limit 20000,10 # 數據越往後越慢 - 索引表中掃: select * from userinfo where
Flask分頁呈現資料時序號按流水號顯示
將資料庫中查詢出來的內容按照新增時間降序呈現到頁面,呈現時頁面中有“編號”列。 從資料庫中查詢資料並放到頁面中呈現把並不複雜: 在路由中利用PythonSQLAlchemy將資料內容從資料庫中查出並進行分頁處理。 資料一共有12條,每頁顯示10條資料。 @admin_blu.rout
【小程式】分頁載入資料,下拉載入更多,上拉重新整理
【 小程式】分頁載入資料,下拉載入更多,上拉重新整理 分頁載入的優點就不多說了,下面主要記錄一下幾個問題點。 scroll-view元件不能用在頁面根佈局中,不然觸發不了系統的onPullDownRefresh()、onReachBottom()回撥。 在Page頁
mysql分頁 和 mysql中利用編號id和每頁條數來進行分頁
1.mysql分頁 【語句順序】 select 選擇的列 from 表  
ssm框架整合入門系列——查詢-分頁顯示資料
ssm框架整合入門系列——查詢-分頁顯示資料(pageHelper的使用) 查詢也就是顯示操作,在該專案下具體表現為: 訪問index.jsp頁面 index.jsp頁面傳送出查詢員工列表請求 EmployeeController 來接受請求,查出員工資料 來到list.jsp頁面進
例項:建立一個表格,分頁顯示資料(MongoDB資料庫儲存),功能:實現增刪改查
需求:建立一個表格,分頁顯示資料,功能:實現增刪改查 效果圖: 自動建立一個專案 命令列: express mongodb-demo --view=ejs cd mongodb-demo npm install npm install mongodb --save npm sta