1. 程式人生 > >單表過百萬級別同步資料sql寫法

單表過百萬級別同步資料sql寫法

0 概述

實際工作中我們很可能要將某張表資料全部匯入到其它表中,當單表資料過大(超過百萬)如果使用sql不當會掃描資料時候比較慢甚至造成故障。

1 例項分析

簡單的表結構如下(500w資料)

CREATE TABLE `User` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `userId` bigint(20) unsigned NOT NULL COMMENT ‘使用者id’,
  `userName`  varchar(50) NOT NULL DEFAULT '' COMMENT ‘使用者名稱’,
  `userType` 
tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '使用者型別', `created` int(11) unsigned NOT NULL COMMENT ‘建立時間', `updated` int(11) unsigned NOT NULL COMMENT '更新時間', `isDeleted` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '刪除', PRIMARY KEY (`id`), KEY `idx_userId` (`userId`) ) ENGINE=InnoDB AUTO_INCREMENT=954
DEFAULT CHARSET=utf8 COMMENT=‘使用者表’;

通過JDBC 連線mysql,有的人直接寫這樣的sql 語句去掃描全表,這樣是很危險的,很容易會將資料庫搞掛掉~

select * from User

有的人說使用limit 就不會出問題~剛開始沒有問題,讀了一會時候你會發現越來越慢,因為全表掃描沒有~

//startend 是個變數
select * from User  limit start,end

較好的寫法如下,充分利用id的索引~

    SELECT
         *
        FROM User
        WHERE
        id>#{maxId}  order
by `id` asc LIMIT #{limit}