2013-12-13 2 views
0

내가 MySQL을 사용하고 있는데 나는 약간의 성능 문제 오순절이 쿼리가 : EXPLAIN최적화 느린 MySQL의 쿼리

SELECT s.ID, headline, uId, teaser, hide_image_archiv, image, image_caption, date_format(cDate, '%d.%m.%Y | %H:%i Uhr') as date, channelid, channel_article.name FROM 
     (SELECT article.ID, uId, headline, teaser, cDate, image, image_caption, channelid, hide_image_archiv 
FROM article 
     inner join article_cCountry on article.ID = ID1 and ID2 = 1 
WHERE sDate < now() 
     and (eDate > now() or eDate = 0) 
     and released = 'TRUE' 
     and (uId in (select ID from user where released = 1) or uId = 0) 
ORDER BY cDate DESC) AS s, channel_article where channelid = channel_article.ID AND channelid = 8 order by cDate desc LIMIT 3 

을 :

enter image description here

그것은 0.30의 주위에 소요 - 0.40 초

최적화 방법이 있습니까? 당신이 시도 할 수

답변

1

검색어 :; "! 및 채널 ID = 8"

SELECT article.ID, 
      uId, 
      headline, 
      teaser, 
      cDate, 
      image, 
      image_caption, 
      channelid, 
      hide_image_archiv, 
      channel_article.name 
    FROM article 
    INNER JOIN article_cCountry ON article.ID = ID1 
    AND ID2 = 1 
    INNER JOIN channel_article 
    ON channelid = channel_article.ID 
    AND channelid = 8 
    WHERE sDate < now() 
    AND (eDate > now() 
      OR eDate = 0) 
    AND released = 'TRUE' 
    AND (uId IN 
      (SELECT ID 
      FROM USER 
      WHERE released = 1) 
      OR uId = 0) 
    ORDER BY cDate DESC LIMIT 3 
+0

놀라운) 0.0019 초 – grundig

+0

내가 가진 다른 쿼리를 시도하는 대신 "의와 채널 ID = 8 "(0.0019 대신 0.3 초) ! =가 =보다 느린 이유는 무엇입니까? – grundig

0

,

SELECT * 
FROM 
(
SELECT s.ID, headline, uId, teaser, hide_image_archiv, image, image_caption, date_format(cDate, '%d.%m.%Y | %H:%i Uhr') as date, channelid, channel_A.name, 
case when eDate = 0 the 1 when eDate > now() then 1 else 0 end as FILTER_IND1, 
CASE WHEN sDate < now() THEN 1 ELSE 0 END AS FILTER_IND2 
FROM article 
inner join article_cCountry on article.ID = ID1 and ID2 = 1 AND released = 'TRUE' AND CHANNELID = 8 
INNER JOIN 
(
    SELECT 0 FROM DUAL 
    UNION 
    SELECT ID FROM USER WHERE RELEASED = 1 
) AS U 
ON U.ID = UID 
INNER JOIN CHANNEL_ARTICLE AS A 
ON A.ID = CHANNELID 
) A 
WHERE FILTER_IND = 1 
ORDER BY CDATE DESC 
LIMIT 3