MySQL "in 節" 内のアイテム数
2023-10-30 07:38:36
質問内容
ユーザーを定義するために3つのテーブルを持っています。
USER: user_id (int), username (varchar)
USER_METADATA_FIELD: user_metadata_field_id (int), field_name (varchar)
USER_METADATA: user_metadata_field_id (int), user_id (int), field_value (varchar)
アプリケーション内の他のユーザーに対して特定のアクセスを持つ中間層のユーザーを作りたいと思います。ログインしているユーザーがアクセスできるユーザーを決定するために、私は以下のようなサブクエリーを使用しています。
SELECT user_id FROM user WHERE user_id
IN (SELECT user_id
FROM user_metadata
WHERE user_metadata_field_id = 1 AND field_value = 'foo')
現在、私はサブクエリの文字列を変数に格納し、ユーザーのリストを取得する必要があるたびに、それを外部クエリに動的に挿入しています。これを実行した後、私は次のように考えました。
user_id
s" の文字列を保存する方がよいはずです。
では、これを変数に格納する代わりに...
$subSql = "SELECT user_id FROM user_metadata WHERE user_metadata_field_id = 1 AND field_value = 'foo'";
... 実際にクエリを実行し、その結果をこのように保存します...
$subSql = "12, 56, 89, 100, 1234, 890";
そして、ログインしているユーザーがアクセスできるユーザーのリストを引き出す必要があるとき、次のようにすることができます。
$sql = "SELECT user_id FROM user WHERE user_id IN ($subSql)";
そして最後に質問です。
MySQL で使用できるアイテムの数
IN
CLAUSE で使用できるアイテムの数は?サブSQLステートメントの代わりに実際のIDを保存することは、毎回外側のクエリを実行するために速くなければなりませんね?
どのように解決するのですか?
ある数字から始まって
IN
テーブルが速くなります。
MySQL
には、多数の定数値にわたって範囲を構築することが、ネストされたループで同じことをするよりも遅くなるようなコード内部の何かがあります。
パフォーマンスの詳細については、私のブログのこの記事を参照してください。
関連
-
[解決済み] MySQLでdatetimeとtimestampのどちらのデータ型を使用すべきですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] MySQLのAUTO_INCREMENTをリセットする方法
-
[解決済み] MySQLの複数行を1つのフィールドに連結することはできますか?
-
[解決済み] 各グループの最後のレコードを取得する - MySQL
-
[解決済み] SQLのIN句をパラメータ化する
-
[解決済み] INNER JOIN ON vs WHERE句
-
[解決済み] MySQLテーブルへの挿入または存在する場合の更新
-
[解決済み] 最初の行への結合方法
-
[解決済み] SQL JOIN - WHERE句とON句の比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
SQLラーニングノート--オペランドには1つのカラムが必要です。
-
SQL-初心者のためのベスト入門SQLクエリ I
-
[解決済み] SQL Server FOR EACH ループ
-
[解決済み] Oracleで上位100行を選択する方法は?
-
[解決済み] SQLの結合形式 - 入れ子になった内側join
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] ...値に挿入する ( SELECT ... FROM ... )
-
[解決済み] SQL Serverでレコードを削除した後、IDシードをリセットする。
-
[解決済み] Count()で条件を指定することは可能ですか?
-
[解決済み] MySQLのIN条件の制限