23
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SQLのIN句で指定できる値の上限について

Posted at

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)

もし間違えていたらご教授いただけると幸いです。

23
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?