Разница в производительности: условие помещено в предложение INNER JOIN vs WHERE

Скажи у меня есть столorder как

id | clientid | type | amount | itemid | date
---|----------|------|--------|--------|-----------
23 | 258      | B    | 150    | 14     | 2012-04-03
24 | 258      | S    | 69     | 14     | 2012-04-03
25 | 301      | S    | 10     | 20     | 2012-04-03
26 | 327      | B    | 54     | 156    | 2012-04-04
clientid is a foreign-key back to the client table itemid is a foreign key back to an item table type is only B or S amount is an integer

и столprocessed как

id | orderid | processed | date
---|---------|-----------|---------
41 | 23      | true      | 2012-04-03
42 | 24      | true      | 2012-04-03
43 | 25      | false     | <NULL>
44 | 26      | true      | 2012-04-05     

Мне нужно получить все строки изorder что для того жеclientid на том жеdate иметь противоположныеtype ценности. Иметь ввидуtype может иметь только одно из двух значений -B или жеS, В приведенном выше примере это будут строки23 а также24.

Другое ограничение заключается в том, что соответствующая строка вprocessed должно бытьtrue дляorderid.

Мой запрос пока

SELECT c1.clientid,
       c1.date,
       c1.type,
       c1.itemid,
       c1.amount,
       c2.date,
       c2.type,
       c2.itemid,
       c2.amount

FROM   order c1
INNER JOIN order c2 ON c1.itemid    =  c2.itemid AND
                       c1.date      =  c2.date   AND
                       c1.clientid  =  c2.clientid AND
                       c1.type     <>  c2.type AND
                       c1.id        <  c2.id

INNER JOIN processed p1 ON p1.orderid   =  c1.id AND
                         p1.processed =  true
INNER JOIN processed p2 ON p2.orderid   =  c2.id AND
                         p2.processed =  true

QUESTION: Держатьprocessed = true как часть предложения join замедляет запрос. Если я перенесу его в предложение WHERE, то производительность будет намного лучше. Это пробудило мой интерес иI'd like to know why.

Первичные ключи и соответствующие столбцы внешнего ключа индексируются, а столбцы значений (value, processed и т. д.)

Disclaimer: I have inherited this DB structure and the performance difference is roughly 6 seconds.

Ответы на вопрос(1)

Ваш ответ на вопрос