【发布时间】:2017-05-11 16:48:38
【问题描述】:
我的查询现在运行良好,但我担心可扩展性和性能。
此查询用于在表 t2 和 t3 中搜索单词,并返回与 t1 匹配的过滤结果。 t1 是多对多表。
目标:
我有 3 个表,用户 (user_id) 可以在其中插入记录。如果 user_id 有恶意并在 3 个表格中的任何一个中创建不适当的内容,我希望能够快速过滤他的内容。当我使用 innoDB 时,我可以立即删除从用户表创建的 user_id 的所有内容,但我想跟踪 user_id 的行为以供以后进一步分析。
情况:
- 我在三个连接表
t1、t2、t3中有一个类似的字段user_id。 - 我在
t2和t3的任何表中搜索一个词(src_wd)。 - 如果
src_word在t2或t3中,则从t1返回结果,即t2.id。 - 如果是邪恶用户,我设置用户为
user.is_active = 0
table t1的外观:
|t1.id|t1.user_id|t2.id|t3.id| | 2 | 158 | 20 | 32 | | 3 | 165 | 20 | 34 | | 4 | 199 | 24 | 36 |我当前的查询:
SELECT DISTINCT t2.id
FROM t1
LEFT JOIN t2 ON t2.user_id = t1.user_id
INNER JOIN t3 ON t3.user_id = t1.user_id
LEFT JOIN user u1 ON u1.user_id = t1.user_id
LEFT JOIN user u2 ON u2.user_id = t2.user_id
LEFT JOIN user u3 ON u3.user_id = t3.user_id
WHERE
u1.is_active != 0 AND u2.is_active != 0 AND u3.is_active != 0
AND
t2.srcField LIKE '%$src_wd%' OR t3.srcField LIKE '%$src_wd%'
我的担心:
我担心的是user 表上的多个联接 u1 u2 u3 我这样做是为了得到我想要的结果。
我可以稍后进行优化,但我正在学习,所以为什么不从现在开始尝试这种好方法。谢谢
【问题讨论】:
标签: mysql join optimization innodb