💾

DBのデータ型

2024/05/05に公開

文字列の型

  • CHAR

    • メモリのサイズは固定
    • char 3 のとき、カラムに入るデータが「A」だけでもメモリ的には [ A |   |   ] 分の箱を確保している
  • VERCHAR

    • ver : 変数のver、『変われるよ』ということ
    • varchar 3 のとき、カラムに入るデータが「A」だけなら [ A ]] になる。「ABC」なら [ A | B | C ]] になる。
    • メモリは可変だが、いつもおしりに『これはメモリサイズが変わる可能性があるよ』ということを持っている( []] の ] )
  • TEXT

    • 非常に量の多いstringを入れる

varchar 1000 , text のカラムにそれぞれ1000文字のデータを入れたとき、
そこから「あ」という文字を検索するのにかかる時間は... varcharの方が早い!


数値の型

※数値はmysqlのもの

  • TINYINT

    • -128 ~ 127 までの値を入れられる
    • 128 を入れようとするとエラーになる(OVER FLOW)
  • SMALLINT

    • -32768 ~ 32767 (65535) 約3万 / 約6.5万
  • MEDIUMINT

    • -8388608 ~ 8388607 (16777215) 約800万 / 約1600万
  • INT

    • -2147483648 ~ 2147483647 (4294967295) 約21億 / 約43億
  • BIGINT

    • 2の64乗

これらに UNSIGNED を付けると、負の数が許容されなくなり、正の数の上限が上がる
(UN : なし, SIGN : 符号(プラスやマイナスの記号), SIGNED : 符号付きの)
例)TINYINTにUNSIGNEDを付ける : -128 ~ 127 → 0 ~ 255 (255 : 2の8乗-1)

MYSql の場合:https://dev.mysql.com/doc/refman/8.0/ja/integer-types.html

  • decimal : 小数点以下まで管理できる
    • Decimal(3.2) → すべての桁数:3、小数点以下の桁数:2
    • 例)5を入れる → 5.00 、 10を入れる → エラー(?)整数部分は1桁しか入らないため

日付の型

  • DATA
    • YYYY-MM-DD
  • DATATIME
    • YYYY-MM-DD HH-mm-ss

DB設計について

DBにデータを持つ時、、

  • 絶対に小さいならtinyint
  • あいまいならint

今は性能がいいのでカラムのデータの大きさを無理に削る必要はない


おまけ

  • DBA
    DBのプロのこと
    tunningのようなパフォーマンスの向上はもちろん、ハードウェアのことまで熟知している

  • DB は ms(ミリ秒)の世界
    1秒 = 1000ms これはDBの世界では遅い
    検索時間が1.05秒から1.00秒になるのも立派なtunningになる

  • tunning チューニング
    DBのパフォーマンスを向上させること
    例)SQL文を修正して検索スピードを上げる、テーブル構成を編集する、カラムのデータ型を変える

  • ORM
    BEから書いたコードを、自動的に各DBのSQLの文法に翻訳してくれる
    → 実装後にDBが変わったり、1つのプロジェクトで複数種類のDBを扱う必要がある場合に便利

Discussion