SQLでIN句を使う時に、指定できる値は1000個が限界だと思っていて
この前業務で
「このSQLのIN句には1200個くらい値が入る可能性があるのに普通に動いてしまってる、、これはバグだ!!」
と思い無駄に時間をくってしまったのでメモ
実際にはDBによって違うようです。
DB | 上限 |
---|---|
oracle | 1000 |
postgreSQL | 2の64乗、一つの単語が2kバイトまで |
mySQL | 上限なし、ただしクエリの上限サイズまで |
mySQLのクエリの上限サイズは調べたいDBに接続して以下のコマンドを打つことで調べられます。
mysql> show variables like 'max_allowed_packet'
+--------------------+----------+
| Variable_name | Value |
+--------------------+----------+
| max_allowed_packet | 33554432 |
+--------------------+----------+
DBサーバーに接続できるのであれば、設定ファイル(/etc/my.cnfのmax_allowed_packetの値)を変えてMySQLを再起動することで、制限値を変えることが可能です。
また、その接続の時だけ変えたい場合であればsetで変更ができます。
mysql> set max_allowed_packet=12345678;
Query OK, 0 rows affected (0.00 sec)
もし間違えていたらご教授いただけると幸いです。