データベースの数字カラムは、CHARとINTでどちらが速いか

課題

法人番号のデータベースを作成しています。

法人番号は13桁の数字で表されており、数字の桁は 1000000000000 が最小値であり、先頭の0埋めは無いため数字型(BIGINT)でも保存できるフォーマットとなっています。

この法人番号で数値型(BIGINT)を使用するか、文字列型(CHAR)を使用するか悩んだため計測してみました。

検証コード

検証コードは次のようなものです。

全ての法人番号リストnumber_listから、法人番号company_number を1つずつ取得し、データベースから法人番号に一致する行を1行取得しています。これを繰り返すコードです。

import common_lib

maria_conn = common_lib.get_connection()
with maria_conn:
    with maria_conn.cursor() as maria_cur:
        for company_number in number_list:
            maria_cur.execute("SELECT company_number FROM company_profile WHERE company_number = %s", company_number)
            result = maria_cur.fetchone()

このデータベースは約500万行ほどあり、company_number の照合作業に BIGINT と CHAR で差異があるなら実行時間の差となるはずです。

結果

結果です。

BIGINTを使用した場合

$ date; python3 test_db.py ;date
Thu Oct  6 12:54:32 JST 2022

Thu Oct  6 13:29:00 JST 2022

34分28秒となりました。

CHAR (13) を使用した場合

$ date; python3 test_db.py ;date
Thu Oct  6 03:50:41 JST 2022
Thu Oct  6 04:25:47 JST 2022

35分28秒となりました。

まとめ

ほぼ差はないようです。

どちらを使っても問題ないでしょう。

コメント

タイトルとURLをコピーしました