ホームページ データベース mysql チュートリアル 高性能MySql进化论(三):ID(标示符)的选择_MySQL

高性能MySql进化论(三):ID(标示符)的选择_MySQL

Jun 01, 2016 pm 01:30 PM
影響 データベーステーブル

bitsCN.com

高性能MySql进化论(三):ID(标示符)的选择

 

在设计数据库表结构的时候,通常情况下每张表结构都有一个字段作为ID,因为 ID会被用来做查询,JOIN,FK等操作,所以ID设计的好坏对性能的影响很大。

 

在为ID选择合适的类型的时候不仅需要考虑这种类型在数据库中存储所占用的空间,还需要考虑该类型在计算或者是值比较时的特性,例如BIT类型存储的时候是二进制的形式,而在数字计算的上下文时,会被转换成对应的十进制形式。

 

对ID进行JOIN操作或者是被用来作为其他表的FK时,涉及的字段类型要保持完全的一致,即使类型都是整数,Unsigned/Signed这样的微小细节也要保持一致,否则在性能方面可能会有意想不到的性能问题,这种问题往往又是难以被发现的。如果使用的Storage Engine 是InnoDB,则可以有效的防止关联字段类型不匹配的问题,如果类型不匹配则会抛出 异常“ERROR 1005 (HY000): Can’t createtable”(VARCHAR(10)和VARCHAR(20)会被认为类型是完全相同的)。

 

创建ID时,要遵守“尽量最小类型原则”(在满足以后需求变化的情况下,要选择占用存储空间最小的类型),例如 有一张存储全国省份的表,对于这张种需求而言,TINYINT比INT更适合作为ID的类型,虽然选用TINYINT只是节省了3个BYTE, 但是在进行JOIN操作或者是作为FK时,性能可能会有很大的提升。

 

实际的应用开发中,ID的类型往往是多样的,例如INT,VARCHAR是比较常用的两种类型,但是有些情况下也可以使用ENUM作为ID的类型,下面的内容分别对这几种类型进行描述

 

整数类型

因为整数类型是一种简单的类型,对比于字符串它的处理更简单速度更快,而且它还支持AUTO_INCREMENT特性,所以一般情况下它是作为ID的首选类型

 

字符串

因为MySQL处理字符串要比整数消耗更多的存储/内存空间,而且速度也相对较慢,所以应该尽量避免使用字符串作为ID的类型。

在无法避免字符串作为ID的类型时,往往会采用“随机值”的策略来生成ID的值,常用的方法包括UUID,MD5, SHA1.在这种情况下需要额外注意,因为随机生成的ID值可能会带来以下三个问题:

         (1)    在执行INSERT语句时意味着索引值会被任意写到索引表的不同位置,这种对于磁盘的随机访问行为,将会导致插入操作的变慢,

         (2)    在执行SELECT操作时,因为逻辑相关的索引也被会被任意写到索引表的不同位置,也会导致查询的变慢。

         (3)    对于数据库提供的CACHE机制而言,这种随机值的策略产生的影响也是比较大的。因为CACHE往往是基于“热区”的原理来实现的,比如说索引表中有100个索引,你执行了多次的查询的结果都是索引表中的20-30这部分的索引,那么 MySQL  Serve为了提高查询效率会把20-30这部分索引的值放到CACHE中,如果你又有一些查询的结果是在30-40 之间的,那么Server会对CACHE进行更新。如果是基于随机的索引,意味着“热区”的区间将会很大,这将导致CACHE的命中率受到影响,而且也会导致CACHE的不断刷新。

如果存储UUID 值,则应该移除“-”符号;或者更好的做法是,用UNHEX() 函数转换UUID 值为16 字节的数字,并且存储在一个BINARY(16) 列中。检索时可以通过HEX()函数来格式化为十六进制格式。

 

枚举

对于ID来说,EMUM 和SET 类型通常是一个糟糕的选择,尽管对某些只包含固定状态或者类型的静态“定义表”来说可能是没有问题的。ENUM 和SET 列适合存储固定信息,例如有序的状态、产品类型、人的性别。没有特殊需求,应该放弃这个选择

 

bitsCN.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

VBOX_E_OBJECT_NOT_FOUND(0x80bb0001)VirtualBox エラー VBOX_E_OBJECT_NOT_FOUND(0x80bb0001)VirtualBox エラー Mar 24, 2024 am 09:51 AM

VirtualBox でディスク イメージを開こうとすると、ハード ドライブを登録できないことを示すエラーが発生する場合があります。これは通常、開こうとしている VM ディスク イメージ ファイルが別の仮想ディスク イメージ ファイルと同じ UUID を持つ場合に発生します。この場合、VirtualBox はエラー コード VBOX_E_OBJECT_NOT_FOUND(0x80bb0001) を表示します。このエラーが発生した場合でも、心配する必要はありません。試すことができる解決策がいくつかあります。まず、VirtualBox のコマンド ライン ツールを使用して、ディスク イメージ ファイルの UUID を変更してみてください。これにより、競合が回避されます。コマンド「VBoxManageinternal」を実行できます。

機内モードを使用した電話の受信はどの程度効果的ですか? 機内モードを使用した電話の受信はどの程度効果的ですか? Feb 20, 2024 am 10:07 AM

機内モードで電話をかけるとどうなるのですか? 携帯電話は、コミュニケーションツールであるだけでなく、娯楽、学習、仕事などの機能が集約された、人々の生活に欠かせないツールの一つとなっています。携帯電話機能の継続的なアップグレードと改善により、人々の携帯電話への依存度はますます高まっています。機内モードの登場により、人々は飛行中に携帯電話をより便利に使用できるようになりました。しかし、機内モードでの他人の通話が携帯電話やユーザーにどのような影響を与えるのかを心配する人もいます。この記事では、いくつかの側面から分析して議論します。初め

TikTokのコメント機能をオフにする方法は? TikTokのコメント機能をオフにするとどうなりますか? TikTokのコメント機能をオフにする方法は? TikTokのコメント機能をオフにするとどうなりますか? Mar 23, 2024 pm 06:20 PM

Douyin プラットフォームでは、ユーザーは自分の人生の瞬間を共有するだけでなく、他のユーザーと交流することもできます。コメント機能は、オンラインでの暴力や悪意のあるコメントなど、不快な経験を引き起こす可能性があります。では、TikTokのコメント機能をオフにするにはどうすればよいでしょうか? 1.Douyinのコメント機能をオフにする方法は? 1. Douyin APPにログインし、個人のホームページに入ります。 2. 右下隅の「I」をクリックして設定メニューに入ります。 3. 設定メニューで、「プライバシー設定」を見つけます。 4. [プライバシー設定] をクリックして、プライバシー設定インターフェイスに入ります。 5. プライバシー設定インターフェイスで、「コメント設定」を見つけます。 6. 「コメント設定」をクリックして、コメント設定インターフェースに入ります。 7. コメント設定インターフェイスで、「コメントを閉じる」オプションを見つけます。 8. [コメントを閉じる] オプションをクリックして、コメントを閉じることを確認します。

Java のファイル インクルードの脆弱性とその影響 Java のファイル インクルードの脆弱性とその影響 Aug 08, 2023 am 10:30 AM

Java は、さまざまなアプリケーションの開発に使用される一般的なプログラミング言語です。ただし、他のプログラミング言語と同様に、Java にもセキュリティ上の脆弱性とリスクがあります。一般的な脆弱性の 1 つは、ファイル インクルードの脆弱性 (FileInclusionVulnerability) です。この記事では、この脆弱性の原理、影響、および防止方法について説明します。ファイルインクルードの脆弱性とは、プログラム内に他のファイルが動的に導入または組み込まれることを指しますが、導入されたファイルは完全に検証および保護されていないため、

データ不足がモデルトレーニングに及ぼす影響 データ不足がモデルトレーニングに及ぼす影響 Oct 08, 2023 pm 06:17 PM

データ不足がモデル トレーニングに与える影響には、特定のコード サンプルが必要です。機械学習と人工知能の分野では、データはモデルをトレーニングするための中核要素の 1 つです。しかし、実際に私たちがよく直面する問題はデータ不足です。データ不足とは、トレーニング データの量が不足していること、またはアノテーション付きデータが不足していることを指し、この場合、モデルのトレーニングに一定の影響を及ぼします。データ不足の問題は、主に次の側面に反映されます。 過学習: トレーニング データの量が不十分な場合、モデルは過学習する傾向があります。過学習とは、モデルがトレーニング データに過剰に適応することを指します。

ハードドライブ上の不良セクタはどのような問題を引き起こしますか? ハードドライブ上の不良セクタはどのような問題を引き起こしますか? Feb 18, 2024 am 10:07 AM

ハードディスク上の不良セクタとは、ハードディスクの物理的な障害、つまりハードディスク上の記憶装置がデータを正常に読み書きできないことを指します。ハードドライブ上の不良セクタの影響は非常に大きく、データ損失、システムクラッシュ、ハードドライブパフォーマンスの低下につながる可能性があります。この記事では、ハードドライブの不良セクタの影響と関連する解決策について詳しく紹介します。まず、ハードドライブ上の不良セクタはデータ損失につながる可能性があります。ハードディスクのセクタに不良セクタがあると、そのセクタ上のデータを読み取ることができなくなり、ファイルが破損したりアクセスできなくなったりします。この状況は、不良セクタが存在するセクタに重要なファイルが保存されている場合に特に深刻です。

地雷カードはゲームに具体的にどのような影響を与えますか? 地雷カードはゲームに具体的にどのような影響を与えますか? Jan 03, 2024 am 09:05 AM

安さを求めてマイニング カードの購入を検討するユーザーもいるかもしれません。結局のところ、これらのカードは一流のグラフィックス カードです。しかし、一部のゲーマーは、マイニング カードがゲームのプレイに与える影響を心配しています。以下の詳細な紹介を見てみましょう。 。マイニング カードを使用してゲームをプレイする効果は次のとおりです。 1. マイニング カードの寿命は非常に短く、プレイしただけで役に立たなくなる可能性があるため、マイニング カードを使用してゲームをプレイする際の安定性は保証できません。 2. マイニング カードは基本的にオリジナル バージョンの去勢バージョンであり、長期にわたる磨耗により、あらゆる面でパフォーマンスが低下する可能性があります。 3. このように、ユーザーはゲームをプレイするときにゲームの効果をすべて表示できない場合があります。 4. さらに、グラフィックス カードの電子コンポーネントは事前に老化します。ゲームをプレイすることによってグラフィックス カードも消費されるため、消耗が大きくなり、ゲームへの影響が大きくなります。 5. 一般に、ゲームをプレイするにはマイニング カードを使用します。

シャーシの漏れはコンピュータにどのような影響を与えますか? シャーシの漏れはコンピュータにどのような影響を与えますか? Feb 22, 2024 pm 06:48 PM

シャーシの漏洩はコンピュータにどのような影響を及ぼしますか? 技術の継続的な進歩に伴い、コンピュータは徐々に人々の生活に不可欠なツールとなり、仕事、勉強、娯楽など、コンピュータの使用と切り離すことはできません。しかし、私たちはコンピュータの利便性を享受する一方で、そのセキュリティにも注意を払う必要があります。ケースの漏洩は潜在的な問題であり、時間内に対処しないとコンピューターとユーザーに重大な影響を与える可能性があります。まず第一に、シャーシの漏れはコンピュータのハードウェアに損傷を与えます。コンピューターのマザーボード、電源、内部回路、その他のコンポーネントはすべてシャーシ内にあります。

See all articles