|
|
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
Есть 2 таблицы Табл1 (ID,Value1) - записей немного Табл2 (Value2) - Записей много. и функция F Надо из Табл2 отобрать такие, что Value1=F(Value2) Сделано криво: strSQL1=select F(Табл2) as Result from Табл2 strSQL2=select (Табл1.ID) where (Табл1.Value1) in (strSQL1) Как бы Вы красиво решили эту проблему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2003, 14:45 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
Corr "Из табл1 отобрать такие" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2003, 14:48 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2003, 15:02 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
Хотелось бы сделать типа select Табл1.ID from Табл1 innerJoin Табл2 on Табл1.Value1=F(Табл2.Value2) Но такое, наверное, работать не будет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2003, 15:03 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
select Табл1.ID from Табл1, Табл2 where Табл1.Value1=F(Табл2.Value2) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2003, 15:06 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
2 ящериц-варан А ты попробуй и скажи, будет работать или нет Блин, сложно что-ли уже написанный (в форум) вопрос в аксес засунуть? Прежде чем вопросы на весь инет задавать? ахереть легче Блин, что за люди живут в поселке андреевка? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2003, 15:09 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
Join будет быстрее работать чем where? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2003, 15:09 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
Лох Позорный, Да, лодыри тут, в основном, проживают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2003, 15:14 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
VIG, Владимир Саныч, спасибо, завтра потестирую на скорость все варинты. Проблема в том, что с подзапросом работает очень медленно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2003, 15:17 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
Нескромный вопрос Varan=wara??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2003, 15:19 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
VIG Да, чтоб не было вопросов насчет половой принадлежности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2003, 15:21 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
Во прикол вариант VIG работает в 20 раз быстрее! Данные о тестовых таблицах: Табл 1 - 256 строк Табл 2 - 13 128 строк Вариант1 (42 секунды) Код: plaintext 1. 2. 3. 4. 5. 6. 7. Вариант 2 (2 секунды) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Интересно, почему такая разница, ведь ничего, по сути, не изменилось!? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 19:09 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
а вариант Саныча проверял? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 19:23 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
я думаю join будет работать также как и where, пользоваться индексами в подзапросах/приджоиненных таблицах, а in ими пользоваться не может, поэтому работает медленно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 19:29 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
впрочем, насчет индексов я погорячился... там же F(ttt), какой индекс.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 19:30 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
Вариант Саныча - вообще не то, что надо, выдает :-( (Хотя и быстро) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 19:37 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
Пардон, Варинт Саныча - 2 минуты 50 секунд ( возвращает то, что надо), но он проще, надо было его и делать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 19:40 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
Хотелось бы услышать комментарии - из за чего такая разница (в 20 раз) в скорости? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 19:51 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
Запрос с IN ,как правило,всегда работает медленнее,чем с JOIN ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 20:23 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
Так как правило или всегда ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 20:28 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
С чем связана такая ошеломительная разница? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 20:28 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
Так как правило или всегда? Забыл написать-нужное подчеркнуть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2003, 22:10 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
Короче, не знает никто. Я опечален :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 10:24 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
Есть мнение: видимо в первом варианте он вызывает подзапрос для каждой строки и потому тормозит. а во-втором варианте у тебя Ас запрос, который либо вызывается однажды, либо (что скорее всего) хорошо кэшируется. Отсюда и такая разница. имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 10:42 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
Sasha_1, Если бы подзапрос отрабатывал для каждой строчки первой таблицы, все это дело работало бы не в 20, а в 256 раз медленнее :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 10:55 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
>не в 20, а в 256 раз медленнее :-) не факт. он может один раз засосать данные в память и потом 256 раз его прогнать в памяти. получится 1 раз долго и 256 быстро ------------------------- 1раз долго = итого (почему бы и нет) в 20 раз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 11:00 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
2 Varan sasha_1 приблизительно правильно сказал... даже если он каждый раз не каждый раз выполняется, то как минимум для каждой строки просматриваеться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 11:02 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
Saha1_1, Пойду у соседей спрошу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 11:02 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
2 Varan: а соседи у нас кто? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 11:07 |
|
||
|
Join не по всему полю
|
|||
|---|---|---|---|
|
#18+
надо научиться определять на глаз запросы считающиеся ~ N (простые, или с вложенными селектами, но без условий в них по полям "внешнего") и ~ N*N (и более - когда условия внешнего селекта по каждой строке ДОЛЖНЫ в момент исполнения передаваться во внутренний - т.е. внутренний должен пересчитываться для каждого набора "параметров" - полей сравнения из внешнего). Время исполнения разбивается в свою очередь на время дисковых операций, и время счета (если оперативки хватает, и промежутки не надо укладывать на диск), дисковых операций (наиболее медленная часть "обычного" запроса) примерно одинаково для "обычного" и квадратичного (скажем ~ 2 с) а "расчетных" в сложном больше ~ 256 раз (на самом деле там еще и упаковку "каждого" элементарного надо иначе обрабатывать) Скажем, это и занимает 40 с. Оценить время "собственно расчета" первого можно поделив 40/256. На самом же деле там есть и некоторые другие компоненты времени выполнения - напр. интерпретация ("составление плана"). Она может занимать отнюдь не маленькое время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2003, 11:49 |
|
||
|
|

start [/forum/search_topic.php?author=al79&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
81ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
87ms |
get tp. blocked users: |
2ms |
| others: | 653ms |
| total: | 908ms |

| 0 / 0 |
