【发布时间】:2011-04-15 04:54:44
【问题描述】:
在深入研究这个问题之前,我先解释一下情况。我有两个表,如下所示:
USERS TABLE
user_id
username
firstName
lastName
GROUPS TABLE
user_id
group_id
我想检索名字是 LIKE '%foo%' 并且属于 group_id = 'givengid' 组的所有用户
所以,查询应该是这样的:
SELECT user_id FROM users WHERE firstName LIKE '%foo'"
我可以创建一个用户定义的 sql 函数,例如 ismember(user_id, group_id),如果用户是组的一部分,则返回 1,如果不是,则返回 0,这将返回上述 select 语句中的 WHERE 子句。但是,这意味着对于每个名字与条件匹配的用户,必须对数千条其他记录运行另一个查询才能找到与组条目的潜在匹配项。
users 和 groups 表每个都有几十万条记录。使用用户定义的函数方法或使用 UNION 语句运行查询是否更传统?如果 UNION 方法最好,带有 union 语句的查询会是什么样子?
当然,我会运行基准测试,但我只是想了解针对这种情况的可能解决方案范围以及通常最有效/最高效的解决方案。
【问题讨论】:
标签: mysql select union user-defined-functions