我有一個奇怪的SQL查詢的問題。我使用MySQL,我會改變數據庫結構,但我不能。所以我必須解決我的問題與查詢。如何優化此sql查詢更快的結果
所以我有3個表格。挑戰,用戶挑戰和用戶訂閱。我需要從那裏得到3是以下內容:
我需要所有具有challenges.private = 0的挑戰的列表,並且我必須排除Users_challenges在當前用戶標識(users_challenges.iduser)下出現的所有挑戰= 414)。 然後我需要challenges.private = 1或0的挑戰,但它們列在第三個表(users_subscribed.iduser = 414)中,並且在這裏我必須從挑戰表中排除所有讀取的id。最後,我需要統一所有的結果,並按時間和限制排除它們。
我希望我得到了正確的辯論,因爲這是非常混亂的,至少對我來說:d
我現在查詢花費26秒執行:
SELECT *
FROM challenges
WHERE challenges.private = 0
AND challenges.isquest = 1
AND challenges.title like '%%'
AND challenges.id NOT
IN (
SELECT users_challenges.idchallenge
FROM users_challenges
WHERE users_challenges.iduser = 414
AND users_challenges.idquest IS NULL
GROUP BY users_challenges.idchallenge
)
UNION
SELECT *
FROM challenges
WHERE challenges.isquest = 1
AND challenges.title like '%%'
AND challenges.iduser
IN (
SELECT users_subscriptions.idsubscribedto
FROM users_subscriptions
WHERE users_subscriptions.iduser = 414
UNION
SELECT 414 AS idsubscribedto
)
AND challenges.id NOT
IN (
SELECT users_challenges.idchallenge
FROM users_challenges
WHERE users_challenges.iduser
IN (
SELECT users_subscriptions.idsubscribedto
FROM users_subscriptions
WHERE users_subscriptions.iduser = 414
UNION
SELECT 414 AS idsubscribedto
)
AND users_challenges.idquest IS NULL
GROUP BY users_challenges.idchallenge
)
ORDER BY TIME DESC
LIMIT 0,30
那麼,有沒有辦法如何簡化這個查詢並獲得相同的結果更快? THX
'AND challenges.title like'%%''是什麼意思?與前導'%'匹配的匹配會禁用索引。 –
這是因爲有時我搜索標題。也許我應該排除這一行,如果搜索字符串是空的? Thx的信息,我不知道,就像領先%禁用索引的使用 – BoonZ