0
我有一个包含用户信息和相关表的用户表,它将向当前用户显示相关用户。优化关联表查询
要获得相关用户到用户ID“25”我的查询看起来像
SELECT
id
FROM users u
INNER JOIN (SELECT
primary_id,
secondary_id
FROM users_rel
WHERE primary_id = '25'
OR secondary_id = '25') temp
ON (u.id = temp.primary_id
OR u.id = temp.secondary_id)
WHERE u.id != '25'
这里的问题是,在users_rel
表中的用户ID可以是在初级侧或次级侧。不要告诉我改变它,因为它已经完成了600万条记录,所以我不能改变它。这个查询需要2到5分钟以4000
记录在user_rel
表中执行,629241
在users
表中执行。
user_rel TABLE
.--------------------------------.
| id | (VARCHAR,36) |
| primary_id | (VARCHAR,36) |
| secondary_id | (VARCHAR,36) |
| del | (TINYINT,1) |
|.______________________________.|
和索引定义为primary_id
组合secondary_id
你可以发布'users_rel'的模式是如何设计的吗?是声明为外键的两列还是它们有任何索引定义? – 2013-03-27 07:32:32
你可以使用'25 IN(\'primary_id \',\'secondary_id \')' – hjpotter92 2013-03-27 07:35:21