• 1
  • 2
  • 3
  • 4
  • 5
mysql数据库问题 首 页  »  帮助中心  »  数据库  »  mysql数据库问题
关于RDS MySQL排序分页查询数据错乱的原因和解决事项
发布日期:2015-11-7 15:11:19

  关于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种方法(创建索引),在提供可预期的结果同时,提高查询的执行效率:


  如问题还未解决,请联系售后技术支持。