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アプレットがスネークゲームを実装

推薦する

HTTP 戻りコード一覧(中国語と英語の説明)

httpリターンコードリスト(以下は概要です)詳細な中国語の説明についてはここをクリックしてくださ...

マージンの重複問題を解決する方法

1. まず、2つ以上の隣接する通常フローブロック要素の垂直マージンの崩壊を引き起こす原因を知る必要が...

CSS におけるスタックコンテキストの具体的な使用法

序文一部の CSS 相互作用の影響により、要素に設定されたz-index実際のサイズに応じて重ね合わ...

Linux ディスク管理 LVM の使用

1. LVM の概要Linux ディスクを管理するときに、このような状況に遭遇することがよくあります...

EclipseにTomcatサーバー設定を追加する方法

1. ウィンドウ -> 設定を選択してEclipseの設定パネルを開きます。 2. 「設定」ウ...

初心者向けのHTMLタグネストルールの詳細なまとめ

最近、HTML を再度学習しており、これは HTML に対する新たな理解と言えます。これを過小評価し...

Vue.js を学ぶ際に遭遇する落とし穴

目次クラス void のポイントES6 矢印関数ヴュートファイvue-cli非同期と同期実行と展開ヒ...

React 関数コンポーネントのパフォーマンス最適化のアイデアの詳細な説明

最適化のアイデア最適化には主に 2 つの方向があります。再レンダリングの回数を減らします。 Reac...

Docker イメージ + nginx を使用して Vue プロジェクトをデプロイする方法

1. Vueプロジェクトのパッケージ化開発されたvueプロジェクトに次の名前を入力し、パッケージ化し...

HTML タイトル属性をラップする方法

数日前にプログラムを書いていたとき、プロンプト情報 (TITLE) を新しい行で囲みたいと思いました...

Nginxの現在の制限設定の詳細な説明

この記事では、最も単純なものから最も複雑なものまで、Nginx の現在の制限構成を例を使って説明しま...

Nodejs でタイムドクローラーを実装する完全な例

目次事件の原因Node Scheduleを使用してスケジュールされたタスクを実装する1. node-...

NextCloud プライベート クラウド ストレージ ネットワーク ディスクの構築に関する詳細なチュートリアル

Nextcloud は、オープンソースで無料のプライベート クラウド ストレージ ネットワーク ディ...

docker を使用して Django テクノロジー スタック プロジェクトをデプロイする方法

Docker の人気と成熟に伴い、Docker は徐々にプロジェクトをデプロイするための第一の選択肢...

CSSアニメーションに基づくSVGボタンのサンプルコード

具体的なコードは次のとおりです。 <a href="#"> <...