我有两张桌子。
用户:
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。所有父子用户的类型为同一学校。
第二个表包含订阅。如果父用户订阅了 1 类和 2 类,则该用户和该父用户的每个子用户将有两行。类可以更多,例如 3 和 4。该类还有一种类型,可以是有效的、无效的或空白的。
现在我有一个自动完成框,用户在其中输入学校名称,并列出了所有带有该输入词的学校的列表。
我的用户表有超过 15000 条记录,我的订阅表有超过 5000 万条记录。我知道我们可以更改数据库结构和其他一些数据插入规则,以便只能通过 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