RDS MySQL排序分页查询数据错乱的原因和解决-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

RDS MySQL排序分页查询数据错乱的原因和解决

2015-12-16 18:50:31 10198 0

问题描述:
RDS MySQL排序分页查询数据错乱的原因和解决


解决过程:
1. MySQL 排序分页查询某些时候会出现数据错乱的情况
比如:
CREATE TABLE alarm_test (
  id bigint(20) NOT NULL DEFAULT '0',
  detail varchar(255) CHARACTER SET utf8 NOT NULL,
  created_on timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
表内开始的 21 行数据:

注:第10行(id=10)的 created_on 字段值不同。
按照 Created_on 字段值排序,取前 10 行:

按照 Created_on 字段值排序,取从11行开始的 10 行:

可以看出,2次排序分页操作得到的数据是有重合而且无序的(实际上排序分页结果会根据情况的不同而变化,结果不可预料)。
出现这个问题的原因在于 created_on 字段的值在前 21 行记录中有 20行数据相同。
2. 如何使会出现相同数值的排序字段结果有序
有2个方法:
修改排序规则,加入主键字段,使排序字段不存在重复记录,比如:

在出现重复值的排序字段上添加索引
CREATE TABLE alarm_test_idx (
  id bigint(20) NOT NULL DEFAULT '0',
  detail varchar(255) CHARACTER SET utf8 NOT NULL,
  created_on timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (id),
  KEY created_on (created_on)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

推荐使用第2种方法(创建索引),在提供可预期的结果同时,提高查询的执行效率:

取消 提交回答
全部回答(0)
相关问答

1

回答

【RDS】RDS MySQL如何使用utf8mb4字符集存储emoji表情?

2022-01-14 15:02:34 845浏览量 回答数 1

1

回答

【RDS】RDS MySQL如何保证数据库字符编码正确?

2022-01-14 11:45:38 675浏览量 回答数 1

1

回答

【RDS】RDS MySQL/MariaDB TX版实例CPU使用率较高,什么原因?

2022-01-13 13:37:57 724浏览量 回答数 1

1

回答

RDS MySQL慢SQL问题的原因和解决方法有哪些?

2022-01-04 16:12:41 2683浏览量 回答数 1

1

回答

RDS mysql实例运行参数设置问题

2018-12-06 09:16:12 651浏览量 回答数 1

2

回答

rdsmysql用navicat连接不上

2014-11-07 13:38:24 7318浏览量 回答数 2

1

回答

RDS MySQL5.1版本还能购买吗?

2014-10-15 09:24:11 6517浏览量 回答数 1

7

回答

使用RDS mysql5.6你一定要知道的

2014-08-28 17:21:31 14527浏览量 回答数 7

1

回答

RDS中的mysql支持事务吗?

2014-06-26 09:50:14 7912浏览量 回答数 1

4

回答

RDSMYSQL我希望有慢SQL或全表扫描日志,能回答一下什么时候提供吗?

2012-08-04 16:03:00 10727浏览量 回答数 4
281
文章
25
问答
问答排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载