Конференция "Базы" » Не пойму в чём ошибка - запрос вроде простой [D7, IB6.x]
 
  • TheEd (30.09.08 03:39) [0]
    Есть таблица T1, и подчинённая таблица T2, связаны по полю T1ID.
    Нужно выбрать из Т1 все поля, на которые из Т2 есть ссылки напр. более N раз, где N - некая константа.
    Делаю так:
    select * from T1
     where T1ID in
     (select T1ID from T2 group by T1ID having count(*) > N)


    Запрос тормозит офигенно. Это при том, что запрос внутри IN выдаёт всего 5 записей, правда в T1 и T2 записей много...
  • Slym © (30.09.08 05:30) [1]
    SELECT T1.*
    FROM
    (SELECT tid, Count(tid) AS CountId FROM t2 GROUP BY tid) as Temp  INNER JOIN T1 ON T1.id = Temp.tid
    WHERE Temp.CountId>5

  • Slym © (30.09.08 05:40) [2]
    TheEd   (30.09.08 3:39)
    Запрос тормозит офигенно

    потомучто твой подзапрос вызывается T1.RecordCount раз и беготни по строкам T1.RecordCount*T2.RecordCount
    в моем случае T1.RecordCount+T2.RecordCount
  • TheEd (30.09.08 06:10) [3]

    > FROM (SELECT tid, Count(tid) AS CountId FROM t2 GROUP BY
    > tid) as Temp  INNER JOIN T1 ON T1.id = Temp.tid


    могу ошибаться, но у меня InterBase7 - он select внутри from не понимает :(
  • Sergey13 © (30.09.08 08:24) [4]
    > [0] TheEd   (30.09.08 03:39)
    > Запрос тормозит офигенно. Это при том, что запрос внутри
    > IN выдаёт всего 5 записей, правда в T1 и T2 записей много...

    А какая часть запроса тормозит то? Подзапрос или основной?
  • Сергей М. © (30.09.08 08:29) [5]

    > он select внутри from не понимает


    Даже если не понимает, то всегда поймет SP или View
  • Виталий Панасенко (30.09.08 09:16) [6]
    SP и конструкция
    for select ... do - будет очень быстро
  • Sergey13 © (30.09.08 09:20) [7]
    > [0] TheEd   (30.09.08 03:39)

    А индекс по T1ID в T2 есть?
  • Johnmen © (30.09.08 09:27) [8]
    SELECT T1.Field1, T1.Field2, ... FROM T1
    JOIN T2 ON T1.T1ID=T2.T1ID
    GROUP BY T1.Field1, T1.Field2, ...
    HAVING COUNT(*)>N


    возможно придется добавить фиктивную агрегатную ф-ию.
  • Правильный$Вася (30.09.08 11:00) [9]

    >  запрос вроде простой [D7, IB6.x]

    противоречит

    > у меня InterBase7 - он select внутри
  • TheEd (30.09.08 22:36) [10]

    > SELECT T1.Field1, T1.Field2, ... FROM T1JOIN T2 ON T1.T1ID=T2.
    > T1IDGROUP BY T1.Field1, T1.Field2, ...HAVING COUNT(*)>N


    Спасибо, работает!!!
 
Конференция "Базы" » Не пойму в чём ошибка - запрос вроде простой [D7, IB6.x]
Есть новые Нет новых   [134473   +28][b:0][p:0.001]