ホームページ データベース mysql チュートリアル sql update更新不同字段类型性能分析

sql update更新不同字段类型性能分析

Jun 07, 2016 pm 05:51 PM
パフォーマンス分析

MySQL在使用update更新数据时,如果条件字段的类型为数字型,但参数是字符型的而且该条件又匹配不到记录,就会引起严重的性能问题

。如下:

 代码如下 复制代码
1,update test007 set key1 = key1 + '1' where id = 200000;
2,update test007 set key1 = key1 + '1' where id = '200000';

注意上面查询语句区别在于参数的类型不同,前者为数字型,后者为字符型,同时id为200000这条记录是不存在的。

如果使用第二条查询,而且满足记录不存在,这条查询将出现严重的效率问题,测试情况如下:

二,测试实践
1,创建一张测试数据表test007

 代码如下 复制代码
CREATE TABLE `test007` (                                  
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,          
`key1` int(10) NOT NULL DEFAULT '0',                 
`key2` int(10) NOT NULL DEFAULT '0',                 
`key3` int(10) NOT NULL DEFAULT '0',                    
PRIMARY KEY (`id`)                                                        
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=gbk

2,创建测试数据

 代码如下 复制代码


$db = _connect("localhost","root","");
mysql__db("test");
set_time_limit(0);
$table = 'test007';
for($i=0;$i     $k1 = rand(10000,300000);
    $k2 = rand(0,3);
    $k3 = rand(1,100000);
    mysql_query("insert into $table (key1,key2,key3) values ('".$k1."','".$k2."','".$k3."')",$db);
}
?>


说明:创建1000000(100W)条记录,数据大小为16.2 MB

3,测试参数类型为数字型的情况

 代码如下 复制代码

mysql> update test007 set key1=key1+'1' where id=10000001;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

查询语句的性能情况
+----------------------+----------+
| Status               | Duration |
+----------------------+----------+
| starting             | 0.000104 |
| checking permissions | 0.000005 |
| Opening tables       | 0.000010 |
| System lock          | 0.013440 |
| Table lock           | 0.000004 |
| init                 | 0.000035 |
| Updating             | 0.000020 |
| end                  | 0.000034 |
| query end            | 0.000002 |
| freeing items        | 0.000028 |
| logging slow query   | 0.000001 |
| cleaning up          | 0.000005 |
+----------------------+----------+
12 rows in set (0.00 sec)

说明:主键id的字段类型为数字型

4,测试参数类型为字符型的情况

 代码如下 复制代码

mysql> update test007 set key1=key1+'1' where id='100000001';
Query OK, 0 rows affected (0.03 sec)
Rows matched: 0  Changed: 0  Warnings: 0

查询语句的性能情况
+----------------------+----------+
| Status               | Duration |
+----------------------+----------+
| starting             | 0.000108 |
| checking permissions | 0.000005 |
| Opening tables       | 0.029382 |
| System lock          | 0.000003 |
| Table lock           | 0.000003 |
| init                 | 0.000039 |
| Updating             | 0.000074 |
| end                  | 0.000022 |
| query end            | 0.000002 |
| freeing items        | 0.000033 |
| logging slow query   | 0.000001 |
| cleaning up          | 0.000001 |
+----------------------+----------+
12 rows in set (0.00 sec)

在使用UPDATE更新记录时,如果被更新的字段的类型和所赋的值不匹配时,MySQL将这个值转换为相应类型的值。如果这个字段是数值类型,而且所赋值超 过了这个数据类型的最大范围,那么MySQL就将这个值转换为这个范围最大或最小值。如果字符串太长,MySQL就将多余的字符串截去。如果设置非空字段 为空,那么将这个字段设置为它们的默认值,数字的默认值是0,字符串的默认值是空串(不是null,是"")。

由于测试环境数据量比较小,所以测试的结果不明显,但关键是在开发过程中一定要注意字段类型与参数类型的一致性,避免在特定情况下造成数据在更新和删除过程中的额外开销。

5,测试大数据量的情况,过程如下

 代码如下 复制代码

第一步:创建数据表
CREATE TABLE `test008` (                                  
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,          
`key1` int(10) NOT NULL DEFAULT '0',                 
`key2` text,                 
`key3` int(10) NOT NULL DEFAULT '0',                    
PRIMARY KEY (`id`)                                                        
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=gbk

第二步:创建测试数据
创建1000000(100W)条记录,数据大小为2.07 GB (2,224,000,000 字节)

第三步:两条查询性能比较
mysql> update test008 set key1=key1+'1' where id='100000001';
Query OK, 0 rows affected (0.03 sec)
Rows matched: 0  Changed: 0  Warnings: 0

mysql> update test008 set key1=key1+'1' where id=100000001;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

第四步:创建索引
mysql> alter table test008 add index key3 (key3);
Query OK, 1000000 rows affected (5 min 54.33 sec)
Records: 1000000  Duplicates: 0  Warnings: 0

第五步:测试不同的条件
mysql> update test008 set key1 = key1 + '1' where id='';
Query OK, 0 rows affected (0.01 sec)
Rows matched: 0  Changed: 0  Warnings: 0

mysql> update test008 set key1 = key1 + '1' where id='12321232123';
Query OK, 0 rows affected (44.58 sec)
Rows matched: 0  Changed: 0  Warnings: 0

mysql> update test008 set key1 = key1 + '1' where id=12321232123;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

mysql> update test008 set key1= key1+ '1' where id='test';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0  Changed: 0  Warnings: 0

注意:上面测试中部分条件已经超出id字段的范围

 

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Kirin 8000 および Snapdragon プロセッサのパフォーマンス分析: 長所と短所の詳細な比較 Kirin 8000 および Snapdragon プロセッサのパフォーマンス分析: 長所と短所の詳細な比較 Mar 24, 2024 pm 06:09 PM

Kirin 8000 と Snapdragon プロセッサの性能分析: 長所と短所の詳細な比較 スマートフォンの普及とその高機能化に伴い、携帯電話の中核コンポーネントであるプロセッサにも大きな注目が集まっています。現在市場で最も一般的で優れたプロセッサー ブランドの 1 つは、Huawei 社の Kirin シリーズと Qualcomm の Snapdragon シリーズです。この記事では、Kirin 8000 プロセッサと Snapdragon プロセッサのパフォーマンス分析に焦点を当て、さまざまな側面における 2 つのプロセッサの長所と短所の比較を検討します。まず、Kirin 8000 プロセッサーを見てみましょう。ファーウェイの最新フラッグシッププロセッサー、Kirin 8000

パフォーマンスの比較: Go 言語と C 言語の速度と効率 パフォーマンスの比較: Go 言語と C 言語の速度と効率 Mar 10, 2024 pm 02:30 PM

パフォーマンスの比較: Go 言語と C 言語の速度と効率 コンピューター プログラミングの分野では、パフォーマンスは開発者が常に注意を払う重要な指標です。プログラミング言語を選択するとき、開発者は通常、その速度と効率に重点を置きます。 Go 言語と C 言語は、2 つの人気のあるプログラミング言語として、システムレベルのプログラミングや高性能アプリケーションに広く使用されています。この記事では、速度と効率の観点から Go 言語と C 言語のパフォーマンスを比較し、具体的なコード例を通じてそれらの違いを示します。まずはGo言語とC言語の概要を見ていきましょう。 Go言語はGによって開発されました

強力なデバッグとパフォーマンス分析のために PHP 拡張機能 XDebug を使用する方法 強力なデバッグとパフォーマンス分析のために PHP 拡張機能 XDebug を使用する方法 Jul 28, 2023 pm 07:45 PM

PHP 拡張機能 Xdebug を使用して強力なデバッグとパフォーマンス分析を行う方法 はじめに: PHP アプリケーションの開発プロセスにおいて、デバッグとパフォーマンス分析は不可欠なリンクです。 Xdebug は、PHP 開発者がよく使用する強力なデバッグ ツールで、ブレークポイント デバッグ、変数追跡、パフォーマンス分析などの一連の高度な機能を提供します。この記事では、Xdebug を使用して強力なデバッグとパフォーマンス分析を行う方法と、いくつかの実用的なヒントと注意事項を紹介します。 1. Xdebug をインストールし、Xdebu の使用を開始します。

C++ コードのパフォーマンス分析を実行するにはどうすればよいですか? C++ コードのパフォーマンス分析を実行するにはどうすればよいですか? Nov 02, 2023 pm 02:36 PM

C++ コードのパフォーマンス分析を実行するにはどうすればよいですか? C++ プログラムを開発する場合、パフォーマンスは重要な考慮事項です。コードのパフォーマンスを最適化すると、プログラムの速度と効率が向上します。ただし、コードを最適化するには、まずパフォーマンスのボトルネックがどこにあるのかを理解する必要があります。パフォーマンスのボトルネックを見つけるには、まずコードのパフォーマンス分析を実行する必要があります。この記事では、開発者がコード内のパフォーマンスのボトルネックを見つけて最適化するのに役立つ、一般的に使用される C++ コードのパフォーマンス分析ツールとテクニックをいくつか紹介します。プロファイリング ツール プロファイリング ツールを使用する

パフォーマンス分析ツールを使用して Java 関数を分析および最適化するにはどうすればよいですか? パフォーマンス分析ツールを使用して Java 関数を分析および最適化するにはどうすればよいですか? Apr 29, 2024 pm 03:15 PM

Java パフォーマンス分析ツールを使用して、Java 関数のパフォーマンスを分析および最適化できます。パフォーマンス分析ツールを選択します: JVisualVM、VisualVM、JavaFlightRecorder (JFR) など。パフォーマンス分析ツールを構成します。サンプリング レートを設定し、イベントを有効にします。関数を実行してデータを収集する: プロファイリング ツールを有効にした後、関数を実行します。パフォーマンス データを分析する: CPU 使用率、メモリ使用率、実行時間、ホット スポットなどのボトルネック指標を特定します。関数の最適化: 最適化アルゴリズムを使用し、コードをリファクタリングし、キャッシュやその他のテクノロジーを使用して効率を向上します。

Java Queueキューのパフォーマンスの分析と最適化戦略 Java Queueキューのパフォーマンスの分析と最適化戦略 Jan 09, 2024 pm 05:02 PM

JavaQueue のパフォーマンス分析と最適化戦略 キューの概要: キュー (キュー) は Java で一般的に使用されるデータ構造の 1 つであり、さまざまなシナリオで広く使用されています。この記事では、JavaQueue キューのパフォーマンスの問題について、パフォーマンス分析と最適化戦略の 2 つの側面から説明し、具体的なコード例を示します。はじめに キューは、プロデューサー/コンシューマー モード、スレッド プール タスク キュー、およびその他のシナリオの実装に使用できる先入れ先出し (FIFO) データ構造です。 Java は、Arr などのさまざまなキュー実装を提供します。

JavaScript でのコードの最適化とパフォーマンス分析のためのツールとテクニック JavaScript でのコードの最適化とパフォーマンス分析のためのツールとテクニック Jun 16, 2023 pm 12:34 PM

インターネット技術の急速な発展に伴い、広く使用されているフロントエンド言語として JavaScript がますます注目を集めています。ただし、大量のデータや複雑なロジックを処理する場合、JavaScript のパフォーマンスが影響を受けます。この問題を解決するには、コードの最適化とパフォーマンス分析のツールとテクニックを習得する必要があります。この記事では、一般的に使用される JavaScript コードの最適化およびパフォーマンス分析のツールとテクニックをいくつか紹介します。 1. グローバル変数を避けるためのコードの最適化: グローバル変数の占有量が多くなります。

簡単に言うと pprof : コードのパフォーマンスを向上させる 簡単に言うと pprof : コードのパフォーマンスを向上させる Apr 07, 2024 pm 05:45 PM

pprof は、Google が提供する Go パフォーマンス分析ツールで、プログラムの実行中にパフォーマンス データを生成するために使用できます。パフォーマンス プロファイリング (CPU/メモリ割り当て) を有効にし、gorun コマンドを使用して構成ファイルを生成することで、開発者は pprof ツールを使用して対話的にデータを分析し、時間のかかる機能を特定し (top コマンド)、より詳細なビジュアル レポート (web コマンド) を生成できます。 、それによって最適化ポイントを発見します。

See all articles