mysql以降、自己増分シーケンスフィールドを追加

1690 ワード

表前期設計では考慮されていないため,後続データが増加した場合,自己増加idフィールドは与えられなかった.
データが数百万に達すると、ページングが遅くなります.(キーワード、ページング最適化)
今考えて、自己増加シーケンスを追加します.
しかしすでに数十万のデータがあり,あるフィールドの順序で自己付加価値の初期化を行うことを考えている.追加の論理コードで実現したくない.
バージョン5.7 innodbエンジン
私はそうしました.
-- 1、    ,    

-- 2、    
-- 2.1       ,varchar(100)    int(    )
alter table t_bd_extension_show modify column showId int;
-- 2.2    ,  showId      (                  ,  )
alter table t_bd_extension_show add primary key (showId);


-- 3、     ,     
alter table t_bd_extension_show add column id BIGINT NOT NULL;
--   key
alter table t_bd_extension_show ADD KEY key_t_bd_extension_show_id(id);
--     id  ,        1    ,  +1
ALTER TABLE t_bd_extension_show MODIFY id BIGINT auto_increment;

-- 4、   ,    id 
-- 4.1         :150628
select max(id) from t_bd_extension_show;
-- 4.2           ,        ,    id    
alter table t_bd_extension_show auto_increment=150628;


-- 5、      
-- 5.1、    
alter table t_bd_extension_show drop primary key;
-- 5.2、        
alter table t_bd_extension_show modify column showId varchar(100);

この数歩で、私の効果に達しました.
mysql> select showId,id from t_bd_extension_show order by id desc limit 10;
+---------+--------+
| showId  | id     |
+---------+--------+
| 1839984 | 150628 |
| 1839982 | 150627 |
| 1839981 | 150626 |
| 1839979 | 150625 |
| 1839977 | 150624 |
| 1839976 | 150623 |
| 1839975 | 150622 |
| 1839974 | 150621 |
| 1839972 | 150620 |
| 1839970 | 150619 |
+---------+--------+

--   showId       ,  id。
--       ,             ,            ,           。

 
全体的な考え方は次のとおりです.
1、テーブルのデフォルトのソートを変更します(ここではプライマリ・キーを変更します).
2、非プライマリキーを追加し、IDフィールドを自増する.