0

1,000 万行未満の大きな mysql テーブルがあるとします。

すべての結果を選択したい場合は、明らかに完全なテーブル スキャンが正常に機能します。

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; 
...

問題は、id size number大きな mysql がそれをFull table scan.

Update1 : スロー クエリ ログ

# Query_time: 600.632844  Lock_time: 0.000071 Rows_sent: 624  Rows_examined: 236584
SELECT `id`, ... FROM `table_name` WHERE ( `id` >= 647121 ) AND ( `id` <= 765101 );

Update2:説明

+----+-------------+------------------+-------+---------------+---------+---------+------+------+-------------+
| 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 | 

Update3 : Mysql バージョン

+------------+
| version()  |
+------------+
| 5.1.46-log | 
+------------+

そして、そのようなクエリを 3 つ同時に送信すると、サーバーのクエリ時間が長くなり、耐えられなくなります。

では、分割クエリを並行して実行することは可能ですか? そうでない場合、なぜ Sqoop はこのようなことをするのでしょうか? どうも。

4

1 に答える 1

0

キーを使用していないようです。かなり古いバージョンの MySQL を使用していますか?

は次のEXPLAINようになります。

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
于 2014-01-23T03:27:11.350 に答える