0

私は2つのテーブルを持っています。

ユーザー:

id(primary key) parent_id   type     school_name
1                           school  my school
2                 1         school  my school
3                 1         school  my school
4                           abc
5                           xyz

サブスクリプション:

id(primary key) uid expiry         type      class
 1               1   somedate      valid      1
 1               1   somedate      invalid    2
 1               2   somedate      valid      1
 1               2   somedate      invalid    2 
 1               3   somedate      valid      1
 1               3   somedate      invalid    2

最初のテーブルにはユーザーがいます。親ユーザーのparent_idが空白です。すべての親と子のユーザーのタイプは同じ学校です。

2 番目のテーブルには、サブスクリプションが含まれています。親ユーザーがクラス 1 および 2 のサブスクリプションを持っている場合、このユーザーとその親のサブユーザーごとに 2 つの行が存在します。クラスは、3 や 4 のように、それ以上にすることができます。そのクラスには、有効、無効、または空白の型もあります。

これで、ユーザーが学校名を入力すると、その入力された単語を含むすべての学校のリストが表示されるオートコンプリート ボックスができました。

ユーザー テーブルには 15000 を超えるレコードがあり、サブスクリプション テーブルには 50000 を超えるレコードがあります。サブスクリプションがparent_idによってのみ識別されるように、データベース構造とその他のデータ挿入ルールを変更できることはわかっています。サブスクリプションにサブチャイルドの行を挿入する必要はありませんが、今は変更できません。

次のクエリを使用しています。5000 人のユーザーがそのオートコンプリートを同時に使用するとどうなるか知りたいです。

SELECT DISTINCT u.id,
                u.school_name
FROM users u,
     subscription s
WHERE u.school_name LIKE 'my%'
  AND u.type = 'school'
  AND u.parent_id = ''
  AND s.type != 'valid'
  AND u.id = s.uid
ORDER BY school_name
4

1 に答える 1