Tôi có truy vấn phức tạp này tạo ra 3744 hàng trong khoảng 50ms.Truy vấn MYSQL Chậm - Truy vấn phụ và bảng Nhiệt độ
SELECT
srl.event_id as eid
, srl.race_num as rnum
, bts.boat_id as bid_id
, srl.series_year as yr
, srl.id as id
, IFNULL(rfi.fleet,fleet_def) as flt_old,flt_match,s.series_id as sid
, s.series_year as syr
,IFNULL(ovr_pts,POINTS('4',IFNULL(ovr_place,place),num_start)) as points
FROM
(SELECT en1.boat_id,en1.boat_name,MAX(fleet) as fleet_def FROM entries en1
JOIN series_race_list srl1 ON srl1.event_id=en1.event_id
AND srl1.series_year=en1.race_year
LEFT JOIN entries_race er1 ON en1.boat_id= er1.boat_id
AND srl1.event_id=en1.event_id
AND srl1.series_year =en1.race_year
WHERE srl1.series_id ='3' AND srl1.series_year ='2012'
AND en1.entry_deleted='N'
GROUP BY boat_id) bts
JOIN series_race_list srl LEFT JOIN series as s ON s.series_id=srl.series_id
AND s.series_year =srl.series_year
LEFT JOIN entries as en ON srl.event_id=en.event_id
AND srl.series_year =en.race_year AND bts.boat_id =en.boat_id
LEFT JOIN entries_race er ON er.race_id= srl.event_id AND er.race_num=srl.race_num
AND er.yr = srl.series_year AND bts.boat_id =er.boat_id
LEFT JOIN event_race_info as eri ON eri.race_id= srl.event_id
AND eri.race_num=srl.race_num AND eri.yr = srl.series_year
ANd er.line=eri.line AND status REGEXP 'prelim|final'
LEFT JOIN race_results as rr ON srl.event_id=rr.race_id
AND srl.race_num= rr.race_num AND srl.series_year =rr.yr
AND bts.boat_id= rr.boat_id AND checked_in='Y'
LEFT JOIN race_fleet_info as rfi ON rfi.race_id= srl.event_id
AND rfi.yr=srl.series_year AND srl.race_num= rfi.race_num
AND rfi.fleet=rr.flt AND complete='Y'
LEFT JOIN series_pts_override as spo ON srl.id =spo.id AND en.boat_id =spo.bid
WHERE s.series_id ='3' AND s.series_year ='2012' AND approved ='Y'
Xin lỗi về độ dài. Như tôi đã nói truy vấn này thực hiện trong khoảng 50ms. Bây giờ tôi muốn sử dụng dữ liệu này và thực hiện các truy vấn trên kết quả hàng 3744 này. Ngay sau khi tôi kết hợp điều này với một truy vấn như
SELECT eid FROM(
......previous query here.....
) data
Thời gian thực hiện từ 50 ms đến 2,5 giây Ouch!
Tôi đã thử tạo bảng tạm thời, Điều đó giống nhau. (Trên thực tế, đây là cách tiếp cận ưa thích của tôi vì tôi sẽ cần thực hiện một số truy vấn khác nhau về kết quả này.
Đọc trên trang này tôi không nghĩ đây là truy vấn phụ tương quan nhưng dường như là hành động giống như vậy.
có vẻ như hành động của việc tạo ra một bảng bí danh là vấn đề của tôi, kể từ khi truy vấn phụ có một bí danh bảng có nguồn gốc và bảng tạm rõ ràng là một bảng.
Làm thế nào tôi có thể nhận được quyền truy cập vào những 3744 dòng dữ liệu với hình phạt thời gian này?
Nếu nó giúp tôi có thể tìm ra cách đăng Giải thích.
Giải thích cho truy vấn dài hơn:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 3744
2 DERIVED s const PRIMARY PRIMARY 5 1
2 DERIVED srl ref series_id,series_id_2 series_id 5 16 Using where
2 DERIVED <derived3> ALL NULL NULL NULL NULL 208 Using join buffer
2 DERIVED en eq_ref PRIMARY,event_id,event_id_2 PRIMARY 9 race_reg_test.srl.event_id,bts.boat_id 1 Using index
2 DERIVED er ref PRIMARY,boat_id,boat_id_2 boat_id_2 5 bts.boat_id 5
2 DERIVED eri eq_ref PRIMARY PRIMARY 13 race_reg_test.srl.event_id,race_reg_test.srl.race_... 1
2 DERIVED rr ref PRIMARY,boat_id boat_id 4 bts.boat_id 9
2 DERIVED rfi eq_ref PRIMARY PRIMARY 31 race_reg_test.srl.event_id,race_reg_test.srl.race_... 1
2 DERIVED spo ref PRIMARY PRIMARY 8 race_reg_test.srl.id,race_reg_test.en.boat_id 1
3 DERIVED srl1 ref series_id,series_id_2 series_id 5 16 Using index; Using temporary; Using filesort
3 DERIVED en1 ref PRIMARY,event_id,event_id_2 PRIMARY 5 race_reg_test.srl1.event_id 11 Using where
3 DERIVED er1 ref boat_id,boat_id_2 boat_id 4 race_reg_test.en1.boat_id 9 Using index
Thông tin mới. Tôi nghĩ rằng thời gian thực hiện chỉ là không có thật cho lựa chọn duy nhất. Nhiều hơn tìm kiếm và có vẻ như các cuộc gọi FUNCTION trong Chọn là vấn đề thời gian chính. Vẫn không biết tại sao phpmyAdmin đưa ra các câu trả lời thời gian thực thi khác nhau như vậy. hmmm ... – davewhirlwind
Bất kỳ cơ hội nào bạn có thể đóng gói một số tập dữ liệu này bằng Chế độ xem? –
Tôi sẽ thử chạy truy vấn cơ sở với cờ không có bộ nhớ cache được bật: CHỌN SQL_NO_CACHE srl.event_id ... Chỉ để đảm bảo rằng nó thực sự quay trở lại trong 50ms và không phải chỉ trở lại từ bộ nhớ cache. – Seth