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