課題
法人番号のデータベースを作成しています。
法人番号は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秒となりました。
まとめ
ほぼ差はないようです。
どちらを使っても問題ないでしょう。
コメント