我希望检索约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
暂无答案!
目前还没有任何答案,快来回答吧!