千万级别mysql合并表快速去重简析_MySQL
bitsCN.com
千万级别mysql合并表快速去重简析 mysql合并表去重目标:现有表a和b,把两个表中的数据合并去重到c表中。其中a和b表中数据量大概在2千万左右。基本情况操作系统版本:CentOS release 5.6 64位操作系统内存:8G数据库版本:5.1.56-community 64位数据库初始化参数:默认 数据库表和数据量表a: mysql> desc a2kw;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| c1 | varchar(20) | YES | MUL | NULL | || c2 | varchar(30) | YES | | NULL | || c3 | varchar(12) | YES | | NULL | || c4 | varchar(20) | YES | | NULL | |+-------+-------------+------+-----+---------+-------+4 rows in set (0.00 sec)表bmysql> desc b2kw;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| c1 | varchar(20) | YES | | NULL | || c2 | varchar(30) | YES | | NULL | || c3 | varchar(12) | YES | | NULL | || c4 | varchar(20) | YES | | NULL | |+-------+-------------+------+-----+---------+-------+4 rows in set (0.00 sec) a和b表的数据概况如下mysql> select * from a2kw limit 10;+-----------+-----------+------+----------+| c1 | c2 | c3 | c4 |+-----------+-----------+------+----------+| 662164461 | 131545534 | TOM0 | 20120520 || 226662142 | 605685564 | TOM0 | 20120516 || 527008225 | 172557633 | TOM0 | 20120514 || 574408183 | 350897450 | TOM0 | 20120510 || 781619324 | 583989494 | TOM0 | 20120510 || 158872754 | 775676430 | TOM0 | 20120512 || 815875622 | 631631832 | TOM0 | 20120514 || 905943640 | 477433083 | TOM0 | 20120514 || 660790641 | 616774715 | TOM0 | 20120512 || 999083595 | 953186525 | TOM0 | 20120513 |+-----------+-----------+------+----------+10 rows in set (0.01 sec) 基本步骤 1、在B表上创建索引mysql> select count(*) from b2kw;+----------+| count(*) |+----------+| 20000002 |+----------+1 row in set (0.00 sec)mysql> create index ind_b2kw_c1 on b2kw(c1);Query OK, 20000002 rows affected (1 min 2.94 sec)Records: 20000002 Duplicates: 0 Warnings: 0数据量为:20000002 ,时间为:1 min 2.94 sec2、把a、b分别插入中间表temp表中 创建中间表mysql> create table temp select * from c2kw where 1=2;Query OK, 0 rows affected (0.00 sec)Records: 0 Duplicates: 0 Warnings: 0插入数据mysql> insert into temp select * from a2kw;Query OK, 20000002 rows affected (13.23 sec)Records: 20000002 Duplicates: 0 Warnings: 0mysql> insert into temp select * from b2kw;Query OK, 20000002 rows affected (13.27 sec)Records: 20000002 Duplicates: 0 Warnings: 0 mysql> select count(*) from temp;+----------+| count(*) |+----------+| 40000004 |+----------+1 row in set (0.00 sec)数据量为:40000004 ,时间为:26.50 sec3、temp建立联合索引,强制索引去掉重复数据mysql> create index ind_temp_c123 on temp(c1,c2,c3);Query OK, 40000004 rows affected (3 min 43.87 sec)Records: 40000004 Duplicates: 0 Warnings: 0查看执行计划mysql> explain select c1,c2,c3,max(c4) from temp FORCE INDEX
(ind_temp_c123) group by c1,c2,c3 ;+----+-------------+-------+-------+---------------+----------
-----+---------+------+----------+-------+| id | select_type | table | type | possible_keys | key
| key_len | ref | rows | Extra |+----+-------------+-------+-------+---------------+-------------
--+---------+------+----------+-------+| 1 | SIMPLE | temp | index | NULL | ind_temp_c123 | 71
| NULL | 40000004 | |+----+-------------+-------+ -------+---------------+--------
-------+---------+------+----------+-------+1 row in set (0.05 sec) mysql> insert into c2kw select c1,c2,c3,max(c4) from temp
FORCE INDEX (ind_temp_c123) group by c1,c2,c3 ;Query OK, 20000004 rows affected (2 min 0.85 sec)Records: 20000004 Duplicates: 0 Warnings: 0实际大约花费实际为:6 min
4、删除中间表mysql> drop table temp;Query OK, 0 rows affected (0.99 sec)实际大约花费实际为:1 sec
5、建立c索引mysql> create index ind_c2kw_c1 on c2kw(c1);Query OK, 20000004 rows affected (49.74 sec)Records: 20000004 Duplicates: 0 Warnings: 0mysql> create index ind_c2kw_c2 on c2kw(c2);Query OK, 20000004 rows affected (1 min 47.20 sec)Records: 20000004 Duplicates: 0 Warnings: 0mysql> create index ind_c2kw_c3 on c2kw(c3);Query OK, 20000004 rows affected (2 min 42.02 sec)Records: 20000004 Duplicates: 0 Warnings: 0实际大约花费实际为:5分钟
6、清空a、b表mysql> truncate table a2kw;Query OK, 0 rows affected (1.15 sec)mysql> truncate table b2kw;Query OK, 0 rows affected (1.34 sec)实际大约花费实际为:3sec 一共花费的时间大概在15分钟左右 作者 RuleV5 bitsCN.com

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











ビッグ データ構造の処理スキル: チャンキング: データ セットを分割してチャンクに処理し、メモリ消費を削減します。ジェネレーター: データ セット全体をロードせずにデータ項目を 1 つずつ生成します。無制限のデータ セットに適しています。ストリーミング: ファイルやクエリ結果を 1 行ずつ読み取ります。大きなファイルやリモート データに適しています。外部ストレージ: 非常に大規模なデータ セットの場合は、データをデータベースまたは NoSQL に保存します。

MySQL クエリのパフォーマンスは、検索時間を線形の複雑さから対数の複雑さまで短縮するインデックスを構築することで最適化できます。 PreparedStatement を使用して SQL インジェクションを防止し、クエリのパフォーマンスを向上させます。クエリ結果を制限し、サーバーによって処理されるデータ量を削減します。適切な結合タイプの使用、インデックスの作成、サブクエリの使用の検討など、結合クエリを最適化します。クエリを分析してボトルネックを特定し、キャッシュを使用してデータベースの負荷を軽減し、オーバーヘッドを最小限に抑えます。

PHP で MySQL データベースをバックアップおよび復元するには、次の手順を実行します。 データベースをバックアップします。 mysqldump コマンドを使用して、データベースを SQL ファイルにダンプします。データベースの復元: mysql コマンドを使用して、SQL ファイルからデータベースを復元します。

MySQLテーブルにデータを挿入するにはどうすればよいですか?データベースに接続する: mysqli を使用してデータベースへの接続を確立します。 SQL クエリを準備します。挿入する列と値を指定する INSERT ステートメントを作成します。クエリの実行: query() メソッドを使用して挿入クエリを実行します。成功すると、確認メッセージが出力されます。

MySQL 8.4 (2024 年時点の最新の LTS リリース) で導入された主な変更の 1 つは、「MySQL Native Password」プラグインがデフォルトで有効ではなくなったことです。さらに、MySQL 9.0 ではこのプラグインが完全に削除されています。 この変更は PHP および他のアプリに影響します

PHP で MySQL ストアド プロシージャを使用するには: PDO または MySQLi 拡張機能を使用して、MySQL データベースに接続します。ストアド プロシージャを呼び出すステートメントを準備します。ストアド プロシージャを実行します。結果セットを処理します (ストアド プロシージャが結果を返す場合)。データベース接続を閉じます。

PHP を使用して MySQL テーブルを作成するには、次の手順が必要です。 データベースに接続します。データベースが存在しない場合は作成します。データベースを選択します。テーブルを作成します。クエリを実行します。接続を閉じます。

Oracle データベースと MySQL はどちらもリレーショナル モデルに基づいたデータベースですが、Oracle は互換性、スケーラビリティ、データ型、セキュリティの点で優れており、MySQL は速度と柔軟性に重点を置いており、小規模から中規模のデータ セットに適しています。 ① Oracle は幅広いデータ型を提供し、② 高度なセキュリティ機能を提供し、③ エンタープライズレベルのアプリケーションに適しています。① MySQL は NoSQL データ型をサポートし、② セキュリティ対策が少なく、③ 小規模から中規模のアプリケーションに適しています。
