|
|
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
как заменить LEFT JOIN на EXIST ? собственно subj.... или что? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 14:45:33 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
истина где-то рядом ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 14:46:33 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
или что? преимущество с exists... сравни скорость... особенно если таблицы большие.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 14:47:29 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
>> оператор IN тормоз по сравнению с exists Где об этом написано? Читаем MSDN: EXISTS Specifies a subquery to test for the existence of rows. Returns TRUE if a subquery contains any rows. IN Determines if a given value matches any value in a subquery or a list. If the value is equal to any value returned by subquery or is equal to any expression from the comma-separated list, the result value is TRUE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 14:54:00 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
скажем так.... если таблица R не большая а таблица C большая..... с exists быстро.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 14:55:19 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
2 SilencerID проверь сам... на счет TOP 1 если без сортировки то вернет любую первую.... возможно что с exists теперь уже и не нужно.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 15:02:00 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
MiCe а поднимите количество записей хотя бы до 1000000 вообщем-то JOIN - 5.317 ss EXISTS - 4.808 ss по видимому дальше разница дальше будет расти ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 15:04:31 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
это назувается накладные расходы при нехватке памяти... а если статистика верная может еще вырасти.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 15:08:32 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
to keystop: А проверь-ка для сравнения запрос: SELECT R.ID FROM R WHERE R.ID IN (SELECT TOP 1 C.ID FROM C WHERE C.NAME=123) OR R.ID NOT IN (SELECT C.ID FROM C) to MiCe: Ну, TOP 1 и я могу добавить :) (см. выше) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 16:39:22 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
JOIN - 5.317 ss EXISTS - 4.808 ss Говорите точно скока ве..., тьфу, т.е. скока раз меряли? А индекс по фильтруемым полям имеется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 16:54:34 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
to keystop: хотя нет, проверь этот, без ТОП 1, иначе ошибка - проверку дополнительную нужно: SELECT R.ID FROM R WHERE R.ID IN (SELECT C.ID FROM C WHERE C.NAME=123) OR R.ID NOT IN (SELECT C.ID FROM C) Сколько от мс потянет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 17:05:18 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
Предыдуший пост - цитата из этого источника : http://www.sql-server-performance.com/transact_sql.asp И оттуда же : If you currently have a query that uses NOT IN, which offers poor performance because the SQL Server optimizer has to use a nested table scan to perform this activity, instead try to use one of the following options instead, all of which offer better performance: Use EXISTS or NOT EXISTS Use IN. Perform a LEFT OUTER JOIN and check for a NULL condition [6.5, 7.0, 2000] Updated 5-31-2002 Может использование EXIST instead of LEFT JOIN ето просто мода, но скорее всего нужно проверять на каждом конкретном случае Хотя, было бы интересно понять при каких условиях один метод производительнее другого. Regards, Snark ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 19:58:36 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
Индекс по полю C.Name есть. из-за етого индекса, в том числе я и хочу уйти от LEFT JOIN, так как, как я понимаю, при проверке на NULL индексы использоваться не могут ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 20:14:19 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
дополнительные детали, количество записей в таблице C значительно (примерно в 10 раз) меньше чем в таблице R ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 20:21:46 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
MiCe TOP 1 никогда не выберает все..... сервер ищет первое вхождение.... По сути это верно, но на практике получается следующее: не знаю как там SQL2000, но SQL7 выдает лучшие планы для select 1, чем для select top 1 1, как для exists, так и для not exists. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 20:27:43 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
2 Alexes... top это привычка.... при exists он не нужен... он подразумеватся по умолчанию.... думаю что top 1 1 даст тоже самое.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 20:57:36 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
to Snark Ну смотреть надо в каждом конкретном случае, что применять. Все зависит от количества условий в выражении. В даном случае, все же лучше NOT IN. Но за ссылку спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 22:54:29 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
и чем же ш лучше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2002, 23:29:21 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
Практика - критерий истины, результаты теста : Как видно LEFT JOIN далеко впереди, EXIST ненамного опережает NOT IN Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Regards, Snark ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 01:17:15 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
Sorry, disregard last report, this is the correct one Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Snark ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 01:24:30 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
покажи запросы с count? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 03:01:01 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
меня болше поражает количество строк..... у меня оно разное... отсюда вывод что запросы с left и exists не тождественны.... вот скриптик.... немного урезанный... Код: 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. 25. 26. 27. 28. 29. 30. 31. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 03:15:35 |
|
||
|
как заменить LEFT JOIN на EXIST ?
|
|||
|---|---|---|---|
|
#18+
Код: 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. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 03:16:05 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32067516&tid=1818829]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
48ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
63ms |
get tp. blocked users: |
1ms |
| others: | 236ms |
| total: | 387ms |

| 0 / 0 |
