|
select A.*, B.* from A cross B order by indexed_field_of_A rows N: игнорит 'rows N'. Why ?
|
|||
---|---|---|---|
#18+
hi all DDL: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Требуется вывести строку из test_main_data с максимальным значением ключа {x, id} и "приклеить" к ней значения полей таблицы test_unit_args. Запрос вида: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
-- выполнится мгновенно, ибо: Код: plaintext 1. 2. 3. 4. 5.
(т.е. в NL поступает только две строки). А запрос вида: Код: plaintext 1. 2. 3. 4.
-- будет думкать неск-ко секунд и родит 2.6 млн фетчей. Ибо тут игнорится важный момент: поскольку поля из test_unit_args НЕ участвуют в order-by, их значения в выборке могут быть любыми (но при единственной записи в этой таблице - всё равно одни и те же :)). А раз они м.б. любыми, то можно преобразовывать этот запрос к тому, что приведен первым. А пока что в это запросе - во: Код: plaintext 1. 2. 3. 4. 5.
2 dimitr: можно ли тут что-то сделать или забить "до следующей жизни" ? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2015, 17:37 |
|
select A.*, B.* from A cross B order by indexed_field_of_A rows N: игнорит 'rows N'. Why ?
|
|||
---|---|---|---|
#18+
Таблоид, хотел ответить раньше, но sql.ru сегодня лагает не по детски. Предложения first/rows действуют на оптимизатор как подсказки /* +FIRST_ROWS */. Но для JOIN это работает только тогда, когда соединение происходит по индексу. Может быть пока Код: sql 1. 2. 3. 4.
Код: plaintext 1. 2. 3. 4. 5. 6. 7.
как видим оптимизатор зашёл с меньшего потока в результате чего пришлось применить внешнюю сортировку. Теперь добавим rows 10 Код: sql 1. 2. 3. 4. 5.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
здесь оптимизатор поменял стратегию и включилась навигация по индексу А теперь попробуем провернуть тоже самое с HASH JOIN Код: sql 1. 2. 3. 4. 5.
и в плане видим всю ту же внешнюю сортировку Код: plaintext 1. 2. 3. 4. 5. 6. 7.
хотя конкретно в данном случае наверное можно было бы по HORSE можно было бы сделать навигацию по индексу, раз уж она всё равно главная. А уж cross join оптимизатор думаю не рассматривает и вовсе ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2015, 20:54 |
|
|
start [/forum/topic.php?fid=40&fpage=72&tid=1562644]: |
0ms |
get settings: |
9ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
others: | 300ms |
total: | 411ms |
0 / 0 |