我有兩個表,客戶端將通過使用用戶名搜索用戶表中的記錄和用戶ID,然後搜索房間表並返回結果,但是我現在的代碼似乎很慢。從一個表中選擇數據並加入另一個表爲主「密鑰」是非常緩慢的
我在我的房間表中有大約750,000條記錄,在我的用戶表中有大約550,000條記錄,所以我的結果往往需要大約5-7秒的時間才能顯示回客戶端,是否有替代我的代碼?
SELECT
`rooms`.`id`,
`rooms`.`caption`,
`rooms`.`description`,
`rooms`.`roomtype`,
`rooms`.`owner`,
`rooms`.`state`,
`rooms`.`category`,
`rooms`.`users_now`,
`rooms`.`users_max`,
`rooms`.`model_name`,
`rooms`.`score`,
`rooms`.`allow_pets`,
`rooms`.`allow_pets_eat`,
`rooms`.`room_blocking_disabled`,
`rooms`.`allow_hidewall`,
`rooms`.`password`,
`rooms`.`wallpaper`,
`rooms`.`floor`,
`rooms`.`landscape`,
`rooms`.`floorthick`,
`rooms`.`wallthick`,
`rooms`.`mute_settings`,
`rooms`.`kick_settings`,
`rooms`.`ban_settings`,
`rooms`.`chat_mode`,
`rooms`.`chat_speed`,
`rooms`.`chat_size`,
`rooms`.`trade_settings`,
`rooms`.`group_id`,
`rooms`.`tags`,
`rooms`.`push_enabled`,
`rooms`.`pull_enabled`,
`rooms`.`enables_enabled`,
`rooms`.`respect_notifications_enabled`
FROM
`rooms`
JOIN `users` ON `users`.`id` = `rooms`.`owner`
WHERE
`users`.`username` = 'query'
ORDER BY
`rooms`.`users_now` DESC
LIMIT 50
解釋計劃:
1 SIMPLE users const PRIMARY,id,username username 128 const 1 Using index
1 SIMPLE rooms index owner users_now 4 50 Using where
我已經收錄了相應的列,但似乎仍然很慢的結果。謝謝!
如果你在兩個表中有很多列,那麼不要使用'*'只是選擇需要的部分,同時在你的問題中發佈'EXPLAIN你的查詢'計劃以供查詢 –
@M Khalid Junaid對此抱歉,我只是爲了這個帖子(認爲查詢可能在這裏看起來太大/太狹窄了),我已經更新了這篇文章。 – Sledmore
這已經足夠了,您還需要運行[*'Explain' *](http://dev.mysql.com/doc/refman/5.0/en/explain.html)計劃查詢並將輸出內容發佈到您的問題,以便未來的訪問者可以分析原因 –