65

MySQLデータベースでどちらが速いですか?ブール値、またはブール値を表すために0と1を使用しますか?私のフロントエンドには、yes/noラジオボタンがあります。

4

4 に答える 4

66

「ブール値を使用」オプションが有効になっている一部の「フロント エンド」は、すべての TINYINT(1) 列をブール値として扱い、その逆も同様です。

これにより、アプリケーションで、1 と 0 ではなく TRUE と FALSE を使用できます。

これはアプリケーションに実装されているため、データベースにはまったく影響しません。

BOOLEANMySQL には実際には型はありません。BOOLEAN は TINYINT(1) の単なる同義語であり、TRUE と FALSE は 1 と 0 の同義語です。

変換がコンパイラで行われる場合、アプリケーションのパフォーマンスに違いはありません。そうしないと、違いはまだわかりません。

より効率的にコーディングできる方法を使用する必要がありますが、この機能を使用しないと、その特定の「フロント エンド」ベンダーへの依存度が低下する可能性があります。

于 2012-06-01T14:50:52.917 に答える
26

MySQLでは、TRUEはのFALSE同義語ですTINYINT(1)

したがって、基本的には同じですが、MySQLは0/1に変換されます。したがって、それがTINYINT簡単な場合は、を使用してください。

PSパフォーマンス
は (あるとしても)非常に小さい可能性が高いので、StackOverflowで質問する必要がある場合は、データベースに影響を与えません:)

于 2012-06-01T14:42:05.973 に答える
7

Bittinyint好みに合わない場合のオプションもあります。いくつかのリンク:

驚くことではありませんが、数値型に関する詳細情報はマニュアルにあります

もう 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 分)

于 2012-06-01T15:00:12.973 に答える
3

パフォーマンスに関心がある場合は、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 にテーブルのテーブル構造を提案させると便利ですが、テーブルがすでに大量のデータで満たされている場合、これは長時間の最適化の可能性です。

于 2012-06-01T15:00:30.143 に答える