如何并行扫描大型mysql表?

如何并行扫描大型mysql表?,mysql,sqoop,full-table-scan,Mysql,Sqoop,Full Table Scan,假设我们有一个很大的mysql表,它只有不到1000万行 如果我想选择所有的结果,很明显,一个完整的表格扫描可以很好地工作 select * from table_name; 但如何使之并行?我发现Sqoop中的解决方案是Split select * from table_name where id >= 1 and id < 10000; select * from table_name where id >= 10000 and id < 20000; selec

假设我们有一个很大的mysql表,它只有不到1000万行

如果我想选择所有的结果,很明显,一个完整的表格扫描可以很好地工作

select * from table_name; 
但如何使之并行?我发现Sqoop中的解决方案是
Split

select * from table_name where id >= 1 and id < 10000;
select * from table_name where id >= 10000 and id < 20000;
select * from table_name where id >= 20000 and id < 30000; 
...
更新2:解释

+----+-------------+------------------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table            | type  | possible_keys | key     | key_len | ref  | rows | Extra       |
+----+-------------+------------------+-------+---------------+---------+---------+------+------+-------------+
|  1 | SIMPLE      | table_name | range | PRIMARY       | PRIMARY | 4       | NULL |    1 | Using where | 
更新3:Mysql版本

+------------+
| version()  |
+------------+
| 5.1.46-log | 
+------------+
如果我们同时发送3个这样的查询,服务器的查询时间太长,我们无法忍受


那么,有可能并行执行拆分查询吗?如果不是,为什么Sqoop会这样做?thx.

看起来它没有使用任何键。您使用的是比较旧的MySQL版本吗

解释应与此类似:

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra
1   SIMPLE  table_name  range   PRIMARY     PRIMARY     4   NULL    5926    Using index condition

只需创建到数据库的多个连接并发出问题中的查询。我假设id是主键或具有索引。您是否尝试过
EXPLAIN
检查它是否真的在进行表扫描?@hongta Yes
id
是主键。我将在mysql中显示慢速查询日志。那么这是针对
的解释,其中id>=1和id<10000
查询?如果您将上限降低到
100
?@zerkms似乎不是一个完整的表扫描。但是为什么这么慢呢?对不起,我对解释结果的理解有误。所有更新。
id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra
1   SIMPLE  table_name  range   PRIMARY     PRIMARY     4   NULL    5926    Using index condition