Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Тоу Д. -> "Настройка SQL. Для профессионалов" -> 36

Настройка SQL. Для профессионалов - Тоу Д.

Тоу Д. Настройка SQL. Для профессионалов — СПб.: Питер, 2004. — 333 c.
ISBN 5-94723-959-0
Скачать (прямая ссылка): nastroykasqldlyaprof2004.djvu
Предыдущая << 1 .. 30 31 32 33 34 35 < 36 > 37 38 39 40 41 42 .. 161 >> Следующая

72

3. Просмотр и интерпретация планов выполнения

сы, можно понять, что именно псевдоним Е, а не псевдоним М, представляет ведущую таблицу, хотя оба псевдонима указывают на одну и ту же таблицу Employees. He настолько понятно, к какому из псевдонимов для Locations база данных обращается первой. Здесь нам помогают номера перед именами таблиц. Они указывают порядок перечисления псевдонимов в выражении FROM, поэтому вы знаете, что первый псевдоним для Locations, LE1 — это последний псевдоним, к которому обращается план выполнения.

ПРИМЕЧАНИЕ ---------------------------------------------------------------------------

Добавление номера перед именем таблицы — это единственное реальное изменение, которое я внес по сравнению со стандартной формой, где разработчики Oracle просматривают планы выполнения. Добавление выражения T0_CHAR (OBJ ECT_INSTANC E) 11 в код SQL для просмотра плана позволяет избежать

двусмысленности. Номера помогают в случаях, когда одна таблица несколько раз появляется в выражении FROM, HO один из возможных порядков соединения псевдонимов важнее, чем другой.

¦ Все четыре операции считывания из таблиц производятся через индекс, на что указывает фраза TABLE ACCESS BY INDEX ROWID перед каждым именем таблицы. Используемый индекс и указание того, гарантируется ли его уникальность, можно найти в записях с отступом под строкой с описанием доступа к каждой таблице. Так, вы знаете, что к ведущей таблице E доступ осуществляется путем сканирования диапазона индекса EMPLOYEE_LAST_NAME (причем считывание хотя бы потенциально затрагивает несколько строк за раз). Операции считывания из остальных таблиц — это уникальные считывания через первичные ключи таблиц. Так как все операции считывания, которые выполняются после обработки ведущей таблицы, относятся к уникальным соединениям, вы знаете, что максимальное количество строк, которые запрос может считать из любой из оставшихся таблиц, равно количеству строк, считанных из ведущей таблицы.

ВНИМАНИЕ ------------------------------------------------------------------------------

Для этого примера я взял имена индексов, при помощи которых несложно понять, какой индексированный столбец обеспечивает доступ к таблице, по чаще всего индексы имеют не такие понятные имена. Если вам не совсем понятно, какой столбец или столбцы составляют используемый индекс — не гадайте! Одна из наиболее распространенных ловушек при настройке в Oracle — это неоправданное предположение, что сканирование некоего диапазона индекса является сканированием именно желаемого диапазона индекса.

Когда вы видите уникальные операции сканирования индекса, то можете с уверенностью сказать, что они обслуживают условия равенства по уникальному ключу. Обычно существует только один столбец или комбинация столбцов, который может охватить индекс, чтобы обеспечить уникальное сканирование. Сканирование диапазона индекса — это совсем другое дело. Если вы не знаете, какие индексы существуют для таблицы и как называются индексы для каждой комбинации столбцов, а также, если имена индексов не позволяют понять, какие столбцы обрабатываются ими, всегда проверяйте индексы — на случай, если сканирование проводится не по тому диапазону индекса, который вы ожидаете. Вот простейший сценарий проверки:

-- File called index.sql column column_name format a40 set pagesize 999 SELECT INDEX NAME. COLUMN NAME
Чтение планов выполнения в Oracle

73

FROM USERJND_COLUMNS

WHERE TABLEJJAME = UPPERCSSD

ORDER BY INDEX JJAME. COLUMNJiOSITION:

В утилите SQL* Plus, войдя в схему, содержащую таблицу, которую вы хотите проверить, запустите в строке с приглашением SQL> команду Pindex <Имя_тдблицы>. В ответе утилиты будут по порядку перечислены многостолбцовые индексы, начиная с первого столбца. Далее показан пример использования сценария:

SQL> @index Locations

INDEXJJAME COLUMNJWIE

LOCATION JKEY L0CATI0NJD

SQL>

Чтобы увидеть функциональные индексы и то, к чему они будут применяться (обычно это блоки запроса, где есть условия для 11РРЕЯ(<Столбец>) или LOWER(<Столбец>) или производится преобразование типа столбца), используйте сценарий f і ndex. sql:

-- File called findex.sql set long 40 set pagesize 999

SELECT INDEXJJAME. C0LUMN_EXPRESSI0N FROM USERJNDJXPRESSIONS WHERE TABLEJJAME = UPPER CM')

ORDER BY INDEXJJAME. COLUMNJ0SITI0N:

Интерпретация плана выполнения

Я объяснил, как узнать порядок соединения таблиц в запросе, методы их соединения и методы доступа к ним для получения надежного плана выполнения, показанного ранее. Если вы объедините эти знания с основами, изложенными в главе 2, то сможете понять, как Oracle обращается к данным. Чтобы проверить ваше понимание, попробуйте изложить полный план выполнения по-русски, как набор инструкций для базы данных. Сравните ваши результаты со следующим описанием. Если возникло слишком много разногласий, попробуйте еще раз провести анализ плана выполнения после того, как прочитаете еще несколько описаний других планов, чтобы проверить, насколько улучшилось ваше понимание. Далее план выполнения описан в повествовательной форме, как инструкции для базы данных.
Предыдущая << 1 .. 30 31 32 33 34 35 < 36 > 37 38 39 40 41 42 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100