Интерпретация плана запроса

GorOleg
Дата: 22.09.2004 17:16:00
Есть два РАЗНЫХ запроса.
У одного план

Optimizer=CHOOSE (Cost=805 Card=1 bytes=243)

у другого

Optimizer=CHOOSE (Cost=651 Card=2405 bytes=223665)


Какой запрос лучше использовать. ( По логике приложения могу и тот и другой)

Где можно почитать как интерприттировать план запроса?
GorOleg
Дата: 22.09.2004 17:39:12
Хоть запросы и выдают разные данные, но логику приложения можно и так и так повернуть.

Всегда думал что чем меньше COST тем лучше, но тут что-то по CARD слишком большое расхождение. На что он влияет?
Markelenkov
Дата: 22.09.2004 19:57:36
CARD - число строк, возвращаемых запросом. Влияет, например, на объем памяти, необходимый для выполнения запроса, на расходы на сортировку, соединение таблиц, на расходы (в случае необходимости) передачи результата клиенту по сети и т.д.

COST вычисляется в попугаях и не всегда отражает верное соотношение в реальной стоимости выполнения запросов. В 9-ке желательно собрать системную статистику (DBMS_STATS.GATHER_SYSTEM_STATS), после этого стоимости должны стать более правдивыми.
ten
Дата: 23.09.2004 07:22:30
Добрый день. Только по плану разбора нельзя уверенно утверждать, что один запрос будет выполняться быстрее другого. Для точности необходимо собрать статистику выполнения, (кстати, ее желательно опубликовать) и уже по ней смотреть, какой запрос как работает.
nata1111
Дата: 23.09.2004 10:02:56
http://ln.ua/~openxs/projects/oracle/ora004.html
Barkovsky
Дата: 23.09.2004 11:30:04
еще:

GorOleg
Всегда думал что чем меньше COST тем лучше, но тут что-то по CARD слишком большое расхождение.


вы думали правильно, но не до конца:)
чем меньше cost, тем для оптимизатора - лучше. однако, это величина, имеющая значение только при выборе оптимизатором планов для ОДНОГО И ТОГО ЖЕ запроса. если запросы разные, то cost'ы сравнивать нельзя. (они как люди:)

GorOleg
Какой запрос лучше использовать.

очевидно, тот, который быстрее.
Журавлев Денис
Дата: 23.09.2004 11:54:11
GorOleg
Есть два РАЗНЫХ запроса.
У одного план

Optimizer=CHOOSE (Cost=805 Card=1 bytes=243)

у другого

Optimizer=CHOOSE (Cost=651 Card=2405 bytes=223665)


Какой запрос лучше использовать. ( По логике приложения могу и тот и другой)

Где можно почитать как интерприттировать план запроса?


А сколько строк на самом деле возвращает запрос? Чем точнее card соотвествует реальности тем лучше, значит оптимизатор непроглючил и статистика собрана верно.
Markelenkov
Дата: 23.09.2004 13:47:52
Barkovsky
очевидно, тот, который быстрее.

А мне очевидно, что тот, который ресурсов меньше кушает ;-)
Barkovsky
Дата: 23.09.2004 14:28:31
по-моему.. одно без другого невозможно:)
мне не придумать запрос который бы работал быстро, но жрал много ресурсов. и наборот.

но если бы такой был - тогда надо смотреть на специфику использования, если, к примеру, этот запрос используется большим числом пользовтелей, то тогда предпочтение отдается в выборе меньших ресурсов. если наоборот - то тот, который быстрее:)
Fucker
Дата: 23.09.2004 16:04:17
Barkovsky
по-моему.. одно без другого невозможно:)
мне не придумать запрос который бы работал быстро, но жрал много ресурсов. и наборот.

но если бы такой был - тогда надо смотреть на специфику использования, если, к примеру, этот запрос используется большим числом пользовтелей, то тогда предпочтение отдается в выборе меньших ресурсов. если наоборот - то тот, который быстрее:)


Это ты зря...
прочти внимательно:

Oracle® Database Performance Tuning Guide
10g Release 1 (10.1)
Part Number B10752-01
The ALL_ROWS hint explicitly chooses the query optimization approach to optimize a statement block with a goal of best throughput (that is, minimum total resource consumption)

The FIRST_ROWS(n) hint instructs Oracle to optimize an individual SQL statement for fast response, choosing the plan that returns the first n rows most efficiently


Fucker