mysql - проблема порядка и левого внешнего соединения - PullRequest
0 голосов
/ 19 августа 2010

Когда я использую левое внешнее соединение с order by в приведенном ниже запросе, запрос выполняется бесконечно, без предоставления набора результатов. Тем не менее - по отдельности они работают нормально, то есть, если я изменю его с левого внешнего соединения на внутреннее соединение. Но мне нужны все значения из таблицы interregen ниже.

Не понимаю, в чем может быть ошибка: (

Мой MySQL запрос:

   SELECT r.name, 
          r.network, 
          r.namestring, 
          i.name, 
          i.description, 
          r.rid,   
          i.id, 
          d.dtime,
          d.ifInOctets, 
          d.ifOutOctets, 
          FROM_UNIXTIME(d.dtime)
     FROM range AS r 
     JOIN interregen AS i ON r.rid = i.rid  
LEFT JOIN 1278993600_1_60 AS d ON i.id = d.id  -- i.id is the primary key
                              AND dtime BETWEEN 1279026000 AND 1279040400 
    WHERE r.net = 'ITPN'
      AND i.status = 'active' 
 ORDER BY i.id, d.dtime

Пожалуйста, помогите! Спасибо

1 Ответ

2 голосов
/ 19 августа 2010

Вероятно, ваша проблема в том, что в вашей таблице interregen очень большое количество строк, у которых нет соответствующей записи в таблице 1278993600_1_60.Таким образом, проблема с левым внешним соединением состоит в том, что запрос пытается получить намного больший набор результатов, чем с внутренним соединением.Возможно, в конечном итоге он вернется, но в зависимости от количества строк это может занять некоторое время.

Еще один взгляд на запрос, и вы сможете улучшить производительность, если переместите это:

AND dtime BETWEEN 1279026000 AND  1279040400

куда-то ПОСЛЕ ГДЕ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...