mysql:(pdo)在最后一个位置继续,不使用偏移量

kadbb459  于 2021-06-20  发布在  Mysql
关注(0)|答案(0)|浏览(237)

我希望检索约2亿配置文件使用pdo。
它是一个分区表,因此没有主键,它是用innodbs内部主键排序的。
为了提高性能,我需要按内部排序顺序检索数据,因此出于性能原因,使用sort by some\ u id并从那里继续将不起作用。
使用limit offset根本不起作用,1亿或更多的偏移量需要时间,ram远远不足以将表数据的所有字节都放入缓存。
我需要一些东西来获取一大块行,记住内部位置并继续下一个调用。
更新我挖了一点,这个问题似乎很熟悉,它是解决了在甲骨文中有rowid和rownum,这是指内部的id。
似乎我们在innodb中也有这样一个id,但它是不可查询的?!
这听起来像是mysql在性能查询方面的一个明显缺点。
表格定义:

CREATE TABLE `members` (
  `id` int(11) NOT NULL DEFAULT 0,
  `intern_id` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `first_name` varchar(48) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `last_name` varchar(48) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `middle_name` varchar(48) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `l` varchar(196) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `i` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `ex` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `country_code` varchar(4) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `country_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `state_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `city_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `edu` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `nc` smallint(6) DEFAULT NULL,
  `nj` smallint(6) DEFAULT NULL,
  `jt` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `cn` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `email_address` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `fpe` tinyint(4) DEFAULT NULL COMMENT '1/0',
  `pbu` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `cii` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `unmatched_facts` varchar(2048) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `dt_snapshot` datetime DEFAULT NULL,
  `change_small` tinyint(4) DEFAULT NULL,
  `change_significant` tinyint(4) DEFAULT NULL,
  `jta` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `cna` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `cnia` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `ut_created` int(11) DEFAULT NULL ,
  `reserve_int_2` int(11) DEFAULT NULL,
  `reserve_vc1` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `reserve_vc2` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `reserve_vc_3` varchar(256) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  KEY `id` (`id`),
  KEY `intern_id` (`intern_id`),
  KEY `state_name` (`state_name`),
  KEY `city_name` (`city_name`),
  KEY `i` (`i`),
  KEY `country_name` (`country_name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
  PARTITION BY KEY (`country_name`)
  PARTITIONS 30

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题