MySQL の int、char、varchar のパフォーマンスを比較する

MySQL の int、char、varchar のパフォーマンスを比較する

インターネットには、真実のように見える「噂」がたくさんあります。もちろん、悪意のあるものではありません。そのほとんどは、開発者が自ら率先して調査することを望まず、代わりに他の人の言うことを信じているためです。

データベースに関しては、「int のパフォーマンスは char よりもはるかに高い」といった噂も数多くあります。

最近、int、long、char、varchar のパフォーマンス テストを実施しましたが、実際にはそれらのパフォーマンスに大きな違いはないことがわかりました。

注: c8=char(8)、s8=varchar(8)、i8=(bigint)、c4=char(4)、s4=varchar(4)、i4=char(4)

インデックスなしで 100 万行をクエリします。

[c8 クエリ] を 20 回実行、平均時間消費 312.0 ミリ秒
[s8 クエリ] を 20 回実行、平均時間消費 334.3 ミリ秒
[i8 クエリ] を 20 回実行、平均時間消費 276.95 ミリ秒
[c4 クエリ] を 20 回実行、平均時間消費 354.95 ミリ秒
[s4 クエリ] を 20 回実行、平均時間消費 340.45 ミリ秒
[i4 クエリ] を 20 回実行すると、平均所要時間は 291.1 ミリ秒になります。

インデックスを作成します。

c8 インデックス作成に 2439 ミリ秒かかりました
s8 インデックス作成に 2442 ミリ秒かかりました
i8 インデックス作成に 1645 ミリ秒かかりました
c4 インデックス作成に 2296 ミリ秒かかりました
s4 インデックス作成に 2303 ミリ秒かかりました
i4 インデックス作成に 1403 ミリ秒かかりました

インデックス付きクエリ:

[c8 クエリ] を 10000 回実行、平均時間消費 0.271 ミリ秒
[s8 クエリ] を 10000 回実行、平均時間消費 0.2354 ミリ秒
[i8 クエリ] を 10000 回実行すると、平均時間は 0.2189 ミリ秒になります。
[c4 クエリ] を 10000 回実行、平均時間消費 0.303 ミリ秒
[s4 クエリ] を 10000 回実行、平均時間消費 0.3094 ミリ秒
[i4 クエリ] を 10000 回実行すると、平均所要時間は 0.25 ミリ秒になります。

結論は:

インデックスなし: データが小さくなるため、テーブル全体のスキャンは高速化されませんが、全体的な速度は同じで、ネイティブ型としての int/bigint はわずかに 12% 高速になります。

インデックス付き: char と varchar のパフォーマンスは同等ですが、int はわずかに 18% 高速です。

データの保存、読み取り、書き込みに関しては、整数は同じ長さの文字列と同じですが、varchar には余分なバイトがあるため、パフォーマンスがわずかに影響を受ける可能性があります (1/n)。

データ操作と比較に関しては、整数はネイティブ サポートの恩恵を受けるため、文字列よりもわずかに高速になります。

インデックスを使用すると、整数と文字列のパフォーマンスの違いはさらに小さくなります。

実際の開発では、多くの開発者がchar(1)やchar(4)などの文字列を使用して型列挙を表すことがよくあります。私の意見では、このアプローチは、ストレージスペース、コンピューティングパフォーマンス、可読性、保守性、スケーラビリティの点でintやenumなどのデータ型よりもはるかに優れているため、最適なソリューションです。

以下もご興味があるかもしれません:
  • MySQL CHARとVARCHARの選択方法
  • Mysql の varchar 型に関する注意点
  • MySQL CHARとVARCHARの保存と読み取りの違い
  • MYSQL における char と varchar の違い
  • MySQL の char、varchar、text フィールド タイプの違い
  • Mysql varchar型の合計操作例
  • MySQL で varchar の長さを動的に変更する方法
  • Mysqlでvarcharの長さを設定する方法
  • Mysql データベースで varchar 型を int 型に変換する方法
  • MySQLはvarchar型とnvarchar型の特殊文字をどのように処理しますか
  • 面接官がmysqlのcharとvarcharの違いを尋ねたとき

<<:  Linux のバックグラウンドで & と nohup を使用する方法

>>:  WeChatアプレットがスネークゲームを実装

推薦する

VMware esxi6.5 のインストールと使用の詳細な手順

目次導入建築ESXIの利点vSphere とは何ですか? 2. 仮想マシンの利点3. 仮想マシンを使...

各 Nginx プロセスで開くことができるファイルの最大数を設定する方法

1. システム内で開いているファイルの最大数を確認する #現在のリソース制限設定を表示する ulim...

Centos7 への mysql8.0rpm のインストール チュートリアル

まず、図をダウンロードしてください 1. まず、centos7に付属しているmariadbをアンイン...

純粋な CSS ヘッダーの実装コードを修正

純粋な CSS で固定ヘッダーを実装するのが難しい主な理由は 2 つあります。まず、最大のシェアを持...

Dockerイメージ構築原理の分析(Dockerをインストールしなくてもイメージを構築できる)

イメージの構築は、DevOps プロセスにおいて非常に重要なプロセスです。一般的に、イメージの構築と...

TypeScript 学習ノート: 型の絞り込み

目次序文型推論真理値の絞り込み平等の縮小演算子の絞り込みインスタンスの絞り込み狭まりの本質ユニオン型...

面接でよく聞かれる Vue 修飾子 13 個

目次1. 怠惰な2.トリム3.番号4.停止5. キャプチャ6.自分7.一度8.予防する9.ネイティブ...

HTML/CSS の基礎 - HTML コード記述におけるいくつかの注意事項 (必読)

この記事の警告事項は、ブラウザの互換性とはまったく関係ありません。主に、プロジェクトで遭遇したいくつ...

MYSQLは、ショッピングカートに追加する際に重複追加を防ぐためのサンプルコードを実装します。

序文最近、仕事の都合で、APP ショッピングカートの注文支払いに取り組んでいました。テスト中にバグが...

Windows 10 システムで nginx ファイル サーバーを構成するためのグラフィック チュートリアル

Nginx の公式 Web サイトから Windows バージョンの Nginx をダウンロードしま...

Linux で cmake を使用して MySQL をコンパイルおよびインストールするための詳細なチュートリアル

1. cmakeをインストールする1. cmakeの圧縮パッケージを解凍する [root@mysql...

MySQLはJSON内部フィールドを抽出し、数値としてダンプします

目次背景問題分析1. 属性値はJson形式であり、Json操作関数を使用して処理する必要があります。...

Linuxで権限が拒否された場合の解決策の詳細な説明

許可が拒否されました:その理由は、ファイルの読み取り、書き込み、作成、削除などの権限がないためです。...

MySQL デュアルマシン ホットスタンバイ実装ソリューション [テスト可能]

目次1. コンセプト2. 環境の説明3. マスタースレーブホットスタンバイ実装1. コンセプト1. ...

Docker nginxは1つのホストを実装して複数のサイトを展開します

とあるサイトからレンタルした仮想マシンの有効期限が近づいており、更新料が200元以上かかります。Al...