|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
Здравствуйте! Кто-нибудь может сказать, почему идентичные запросы выполняются разное количество времени на MSSQL и Oracle? вот текст запроса MSSQL: SELECT [A39].* FROM [Накладная] A39 WITH (NOLOCK) WHERE ((EXISTS (SELECT [A40].[Index] FROM [Товары] A40 WITH (NOLOCK) LEFT JOIN [Товар] A35JT1 WITH (NOLOCK) ON ([A35JT1].[DocID]=[A40].[Товар]) LEFT JOIN [ЮрЛицо] A32JT2 WITH (NOLOCK) ON ([A32JT2].[DocID]=[A35JT1].[Производитель]) WHERE ([A40].[LinkDetail]=[A39].[DocID]) AND (EXISTS (SELECT [A33].[Index] FROM [Сотрудники] A33 WITH (NOLOCK) WHERE ([A33].[LinkDetail]=[A32JT2].[DocID]) AND ([A33].[Сотрудник]=9)))))and([A39].[Deleted]=0)) AND (([A39].[DocID]<100017)) ORDER BY [A39].[DocID] DESC и вот текст запроса Oracle: SELECT "A1".* FROM "Накладная1" A1 WHERE ((EXISTS (SELECT "A2"."Index" FROM "Товары3" A2 ,"Товар1" A3,"ЮрЛицо1" A4 WHERE ("A2"."LinkDetail"="A1"."DocID") AND (EXISTS (SELECT "A5"."Index" FROM "Сотрудники1" A5 WHERE ("A5"."LinkDetail"="A4"."DocID") AND ("A5"."Сотрудник"=9))) AND ("A3"."DocID" = "A2"."Товар"(+)) AND ("A4"."DocID" = "A3"."Производитель"(+)))) and ("A1"."Deleted"=0)) ORDER BY "A1"."DocID" ASC MS выполняет такой запрос за пару секунд. Oracle задумывается _ОЧЕНЬ_ долго. Я не дождался ответа. снял задачу после 7 часов.... Пробовал изменить запрос Oracle так: SELECT "A1".* FROM "Накладная1" A1 WHERE EXISTS (SELECT NULL FROM "Товары3" A2 WHERE ("A2"."LinkDetail" = "A1"."DocID") AND EXISTS (SELECT NULL FROM "Товар1" A3 WHERE ("A3"."DocID" = "A2"."Товар") AND EXISTS (SELECT NULL FROM "ЮрЛицо1" A4 WHERE ("A4"."DocID" = "A3"."Производитель") AND EXISTS (SELECT NULL FROM "Сотрудники1" A5 WHERE ("A5"."Сотрудник" = 9) AND ("A5"."LinkDetail" = "A4"."DocID"))))); Этот запрос выполняется около 5 минут. А можно быстрее? Мне говорили, что Oracle НАМНОГО быстрее MSSQL.... Структура таблиц, индексов идентична. Есть ли тут тут гуру, кто объяснит мне, в чем дело и разбудит во мне любовь к Oracle? Или в морг???? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 14:25 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
Планы нужно показать. Без планов МС всегда быстрее ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 14:30 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
Что значит планы? Прошу прощения за идиотский запрос. Я еще новичок в Oracle. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 14:33 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
execution plan'ы в Оракл - это команда explain plan. В МС - не знаю, но что-то аналогичное обязано быть. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 14:34 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
Скажите, а при чем тут планы выполнения? Я не могу понять. Я еще раз говорю, что структура таблиц и данные на обоих серверах идентичны! А MS выполняет запрос на несколько порядков быстрее!!! Ну скажите же мне, где что я не так делаю? И вообще как народ относится к вопросам, использующим Join? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 15:07 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
Ты может быть делаешь все правильно, а oracle нет, поэтому и нужны планы выполнения ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 15:12 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
exec dbms_stats.gather_schema_stats(<юзернэйм>); ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 15:18 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
Ок. Хорошо. Но как мне получить эти самые планы? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 15:19 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
>Скажите, а при чем тут планы выполнения? Я не могу >понять. Я еще раз говорю, что структура таблиц и >данные на обоих серверах идентичны! А MS выполняет >запрос на несколько порядков быстрее!!! >Ну скажите же мне, где что я не так делаю? >И вообще как народ относится к вопросам, >использующим Join? интересно, ели у программиста не работает код он что должен делать - кричать "что я не так делаю?" или как минимум запустить дебаггер? Вот explain plan и является такого рода дебаггером для скл запросов в оракле. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 15:19 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
>Ок. Хорошо. Но как мне получить эти самые планы Каким тулсом Вы пользуетесь для запуска запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 15:21 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
SQL*Plus Worksheet ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 15:26 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
Дайте команду: set autot on explain а затем выполните свой запрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 15:36 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
не парьте вы его планами - пусть сначала статистику соберет и тогда стоимостной оптимизатор хотя бы отработает ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 15:38 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
>не парьте вы его планами - пусть сначала статистику >соберет и тогда стоимостной оптимизатор хотя бы >отработает А вдруг у него там RULE или что-то еще стоит? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 15:41 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
После попытки выполнить команду set autot on explain получил вот что: SP2-0613: Unable to verify PLAN_TABLE format or existence SP2-0611: Error enabling EXPLAIN report ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 15:43 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
запустите скрипт $ORACLE_HOME/rdbms/admin/utlxplan.sql ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 15:49 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
2 AM Действительно, если у вас там все по дефолту настроено, то лучше начать со сбора статистики. Вообще, это подразумевалось и в предыдущих советах 2 .dba ты вроде faq планировал по этому вопросу? ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 16:14 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#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.
Вот это план? Что можно сказать по нему? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 16:14 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
я бы попробовал вот что сделать 1. Переписать запрос через обычное соединение (join) таблиц. Так как сейчас написано через вложенные множеств. EXISTS - обычно не делают, да и некрасиво выглядит. 2. MERGE JOIN (CARTESIAN) (Cost=4 Card=7 Bytes=112) - эта строчка говорит, что нет однозначного условия соединения таблиц и каждая строка одной таблицы сравнивается с каждой строкой другой таблицы (декартово произведение). А это редко когда бывает оправданным ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 16:33 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
>ты вроде faq планировал по этому вопросу? ;-) так это и идет отладка/тестирование вопроса в faq ;-) 2 Andy Mezentsev Тут я полностью присоединяюсь к советам killed. Но все-таки есть подозрение, что статистика не свежая, а времен импорта, я ошибаюсь? Кроме того, еще вопрос - все индексы задействованные в плане выполнения - являются индексами по соединяемым колонкам? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 16:43 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
Может я запрос не правильно понял, но попробуй вот такой: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Если что, пришли план по этому запросу, будем хе-хе хинты расставлять. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 16:44 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 16:51 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
2mms скорее всего да, неправильно. даже на первый взгляд это не то, что мне нужно. взять хотя бы count(...) Но вот статистика: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 17:20 |
|
Oracle or MSSQL 2000. Кто быстрее?
|
|||
---|---|---|---|
#18+
2ora600 А Ваш запрос опять привел мой Oracle в ступор. Уже пошла 25 минута - а он молчит :((( кстати, сервак меня 8.1.7 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2002, 17:23 |
|
|
start [/forum/topic.php?fid=52&fpage=2835&tid=1992823]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
207ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 315ms |
0 / 0 |