2011-09-16 87 views
1

我試圖加快我的網站和主要問題上它幾乎所有頁面上運行一個查詢(代碼如下)。 LIMIT更改加快,但我需要使用LIMIT 99 :( 24速度是〜0.06秒 在100〜0.105秒 服務器限制:子查詢(SELECT video_names.name ...)不能改變加入MySQL優化


SELECT `videos`.`name`, `videos`.`episodes`, `videos`.`is_ended`, `videos`.`id`, `videos`.`logo`, `videos`.`type`, `user_videos`.`episode`, 
(SELECT `video_names`.`name` 
FROM (`video_names`) 
WHERE `video_names`.`vid_id` = `videos`.`id` LIMIT 1) as alt_name 
FROM (`videos`) 
JOIN `user_videos` ON `user_videos`.`vid_id` = `videos`.`id` 
WHERE `user_videos`.`user_id` = '1' 
AND `user_videos`.`status` = '1' 
GROUP BY `videos`.`id` 
ORDER BY `last_change` desc 
LIMIT 24 
+5

我不明白爲什麼子查詢不能改變加入。 – Karolis

+0

在我目前的託管設置好的限制上連接,如果超過設置好的 - ?現場引發錯誤:( – aTei

+1

哪個表有列'last_change'你能告訴我們一個解釋計劃和你有什麼指標 – Karolis

回答

0

我測試所有變種來自StackOverflow和其他來源的巨人。最高車速:

  1. 從問題查詢(時間)
  2. 回答"Couldn't that work"(時間×2)
  3. 查詢,而不sql_big_selects=1(時間X4.5)
  4. 查詢與sql_big_selects=1(時間X5和慢)
0

莫非不是工作?

SELECT 
    `videos`.`name` 
, `videos`.`episodes` 
, `videos`.`is_ended` 
, `videos`.`id` 
, `videos`.`logo` 
, `videos`.`type` 
, `user_videos`.`episode` 
, `video_names`.`name` 
FROM `videos` 
, `user_videos` 
, `video_names` 
WHERE TRUE 
    AND `user_videos`.`user_id` = '1' 
    AND `user_videos`.`status` = '1' 
    AND `videos`.`id` = `user_videos`.`vid_id` 
    AND `videos`.`id` = `video_names`.`vid_id` 
GROUP BY `videos`.`id` 
ORDER BY `last_change` DESC 
LIMIT 24 
; 
+0

不,它不會是相同的查詢。 –

+0

沒有加速,但看起來像它相同的查詢 - 頁面加載成功和所有的數據。 – aTei

0

試試這個腳本

SELECT 
    `v`.`name` 
    , `v`.`episodes` 
    , `v`.`is_ended` 
    , `v`.`id` 
    , `v`.`logo` 
    , `v`.`type` 
    , `u`.`episode` 
    , `v`.`alt_name` 
FROM `user_videos` `u` 
JOIN (
    SELECT `videos`.*, `video_names`.`name` AS alt_name FROM `videos` 
    JOIN `video_names` ON `video_names`.`vid_id` = `videos`.`id` 
    GROUP BY `videos`.`id` 
) `v` ON `u`.`vid_id` = `c`.`id` 
WHERE `u`.`user_id` = '1' 
AND `u`.`status` = '1' 
ORDER BY `last_change` DESC 
LIMIT 24;