由于表前期设计没考虑到,后续数据增长的情况,没有给自增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字段。