MySQLデータベースでどちらが速いですか?ブール値、またはブール値を表すために0と1を使用しますか?私のフロントエンドには、yes/noラジオボタンがあります。
4 に答える
「ブール値を使用」オプションが有効になっている一部の「フロント エンド」は、すべての TINYINT(1) 列をブール値として扱い、その逆も同様です。
これにより、アプリケーションで、1 と 0 ではなく TRUE と FALSE を使用できます。
これはアプリケーションに実装されているため、データベースにはまったく影響しません。
BOOLEAN
MySQL には実際には型はありません。BOOLEAN は TINYINT(1) の単なる同義語であり、TRUE と FALSE は 1 と 0 の同義語です。
変換がコンパイラで行われる場合、アプリケーションのパフォーマンスに違いはありません。そうしないと、違いはまだわかりません。
より効率的にコーディングできる方法を使用する必要がありますが、この機能を使用しないと、その特定の「フロント エンド」ベンダーへの依存度が低下する可能性があります。
MySQLでは、TRUE
はのFALSE
同義語ですTINYINT(1)
。
したがって、基本的には同じですが、MySQLは0/1に変換されます。したがって、それがTINYINT
簡単な場合は、を使用してください。
PSパフォーマンス
は
(あるとしても)非常に小さい可能性が高いので、StackOverflowで質問する必要がある場合は、データベースに影響を与えません:)
Bit
tinyint
好みに合わない場合のオプションもあります。いくつかのリンク:
驚くことではありませんが、数値型に関する詳細情報はマニュアルにあります。
もう 1 つのリンク: http://blog.mclaughlinsoftware.com/2010/02/26/mysql-boolean-data-type/
上記の記事のコメント欄からの引用:
- TINYINT(1) は bit(1) のシノニムではありません。
- TINYINT(1) は -9 ~ 9 を格納できます。
- TINYINT(1) 符号なし: 0 ~ 9
- BIT(1): 0, 1. (ビット、文字通り)。
編集:この編集(および回答)は、元の質問にリモートでのみ関連しています...
Justin Rovang と著者 maclochlainn による追加の引用 (リンクされた記事のコメント セクション)。
すみません、サブストリズムの犠牲になったようです: TINYINT(1): -128-+127 TINYINT(1) UNSIGNED: 0-255 (Justin Rovang 25 Aug 11 at 4:32 pm)
確かにそうですが、投稿はPHPMyAdminがブール値としてリストしたものに関するもので、256の可能性の広い範囲全体から0または1のみを使用しています. (maclochlainn 25 8 月 11 日午後 11 時 35 分)
パフォーマンスに関心がある場合は、ENUM 型を使用する価値があります。インデックスのパフォーマンスが向上するため、大きなテーブルではおそらく高速になります。
使用方法 (ソース: http://dev.mysql.com/doc/refman/5.5/en/enum.html ):
CREATE TABLE shirts (
name VARCHAR(40),
size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
);
しかし、私はいつも次のようにクエリを説明していると言っています。
EXPLAIN SELECT * FROM shirts WHERE size='medium';
クエリに関する多くの情報を提供し、より良いテーブル構造を構築するのに役立ちます。この目的のために、phpmyadmin にテーブルのテーブル構造を提案させると便利ですが、テーブルがすでに大量のデータで満たされている場合、これは長時間の最適化の可能性です。