30

値が 0 と 1 の Tinyint と、MyISAM テーブルと MySQL 5.1 の ENUM 0,1 のどちらが優れていますか?

4

5 に答える 5

26

mysql 5.1 リファレンスBIT(1)に記載されているように使用できます。ブール値を格納するために1ビットしか必要としないのに、8ビットが必要であることをお勧め しません。enumtinyint(1)bit(1)tinyint(1)

于 2010-08-23T09:33:32.040 に答える
4

私の調査によると、5.0.3 より前のバージョンの MySQL では、BIT(1) は TINYINT(1) の同義語です。

5.0.3 以降の MySQL バージョンでは、BIT データ型の動作が変更されています。これはもはや TINYINT のシノニムではなく、何でも 1 バイト未満で格納できる唯一のデータ型です。

このデータ型は、TINYINT または ENUM を使用するよりも好ましい場合があります。私のブログで、どれが最速であるか、3 つのスペース使用量をテストする予定です。サイズと速度の結果を確認したい場合は、下部にリンクがあります。テストベッド: OpenBSD と MySQL を実行する消費者向けグレードの Pentium III ボックス。(遅い DB 開発ボックスでは、悪いコードの影響を実際に感じることができます。また、テスト クエリ間の違いがより識別しやすくなります。または、リソースがほとんど割り当てられていない VM を使用してみてください。)

MySQL 公式ドキュメント。

バロン・シュワルツはそれについてこう言っています。

http://www.xaprb.com/blog/2006/04/11/bit-values-in-mysql/

于 2011-10-19T03:48:45.023 に答える
1

Enum はある意味で、開発者やプログラマーに「ヒント」を与えます。ただし、通常は、プログラムで処理する方が適切です。したがって、ENUM(0,1)、BIT(1)、TINYINT(1) のいずれであっても、すべて 1 バイトを使用する場合、ほとんどの場合、bit(1) で 2 を送信するよりも、クライアント側で処理する方がよいでしょう。または enum(0,1) をサーバーに送信すると、サーバーはとにかく処理する必要があるエラーを返します-より多くのリソースを使用します(ネットワーク+サーバーCPU +クライアントCPU x 2)

通常、0 は false、1 は true を意味します。

于 2013-04-18T00:26:42.463 に答える
1

何が期待されているかが明確になるため、ENUMの方が望ましいと思います。それが測定可能な方法でパフォーマンスを損なう場合、私は非常に驚くでしょう. tinyint にこの作業を行わせるには、列の制約を CHECK する必要があります。現在、これをサポートしている MySQL ストレージ エンジンはありません。

于 2010-08-23T09:30:32.370 に答える
1

最高のパフォーマンスとスペース要件を得るには、ブール値を収集して同じ TINYINT に保存する必要があります。例えば。TINYINT に最大 8 つのブール値を保存します。SMALLINT などの 16 個のブール値。BIT(1) と ENUM の両方で少なくとも 1 バイトを使用します。 https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.htmlBIT(M) - approximately (M+7)/8 bytesを参照してください。したがって、1 つのブール値を保存する場合は、BIT および ENUM と同じオーバーヘッドがあるため、TINYINT を使用しますが、必要に応じて後でさらに 7 つのブール値を保存するオプションを提供します。

于 2018-07-11T09:30:44.377 に答える