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

 

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

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

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


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

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

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

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

-- File called іnddb2.sql

SELECT IndName. ColNames

FROM SVSCAT. INDEXES

WHERE TabName = UCASE('EMPLOYEES'):

B DB2, войдя в схему, содержащую таблицу, которую вам необходимо проверить, отредактируйте сценарий, указав нужную таблицу, и выполните в строке приглашения оболочки команду db2 -tf inddb2. sql. Будут по порядку перечислены многостолбцовые индексы начиная с первого столбца — в одной строке, разделенные знаком +. Далее показан пример использования сценария:

$ db2 -tf іnddb2.sql

INDNAME COLNAMES

EMP_MGR_ID EMPLOYEE_PKEY EMP_LOCATION_I D EMP_DEPARTMENT_ID EMP_HIRE_DATE EMP_LAST_NAME EMP_N ICKNAME EMP_F IRSTJIAME

+MANAGERJ D +EMPLOYEEJD +LOCATIONJD +DEPARTMENTJD +HIREJDATE +LASTJIAME +NICKNAME +FIRSTJIAME

8 record(s) selected.

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

Я объяснил, как узнать порядок соединения таблиц, методы их соединения и способы доступа к ним для надежного плана выполнения, показанного ранее. Если вы объедините эти знания с основами, изложенными в главе 2, то сможете понять, как DB2 обращается к данным, от начала до конца. Чтобы проверить ваше понимание материала, попробуйте изложить полный план выполнения по-русски, как набор инструкций для базы данных. Сравните ваши результаты с моей версией. Если возникло слишком много разногласий, попробуйте еще раз после того, как прочитаете еще несколько планов выполнения, чтобы проверить, насколько улучшилось ваше понимание. Далее план выполнения описан в повествовательной форме, как инструкции для базы данных.
Чтение планов выполнения в DB2

85

1. Используя условие E. LastJIame=?, перейти к индексу EMPJ.ASTJIAME и найти список идентификаторов строк, соответствующих сотрудникам с требуемой фамилией.

2. Для каждого из идентификаторов строки из предыдущего шага считать один блок (логическое считывание, если требуется — физическое) из таблицы Empl oyees (E)1 используя ту часть идентификатора, где хранится адрес блока. Используя ту часть идентификатора, где хранится адрес строки, найти определенную строку, на которую он указывает, и считать из нее все необходимые данные (запрошенные для псевдонима Е).

3. Для каждой такой строки, используя условие соединения E. Location_ID=LE. Lo-cation_ID, перейти к индексу по первичному ключу LocatioNJ3KEY и найти единственный подходящий идентификатор строки, соответствующий записи о местоположении для того сотрудника, чью запись вы уже получили ранее. Если подходящей строки не найдено, отбросить результирующую строку, которая строится в данный момент.

4. В ином случае для каждого подходящего идентификатора строки из предыдущего шага необходимо выполнить считывание одного блока (логическое считывание, если требуется — физическое) из таблицы Locations (LE), используя ту часть идентификатора, где хранится адрес блока. Используя ту часть идентификатора строки, где хранится адрес строки, найти определенную строку, на которую указывает идентификатор, и считать из нее все необходимые данные (запрошенные для псевдонима LE). Присоединить подходящие данные к входящей строке, полученной при предыдущем считывании из таблицы, чтобы завершить результирующую строку. Отбросить всю результирующую строку, если она содержит данные, не отвечающие условию UCASECLE. Description) = ?.

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

Обратите внимание, что в плане выполнения вы не найдете явного шага для последнего фильтра, который отбрасывает строки, не удовлетворяющие условию для описания местоположения. Это тот же самый фильтр «послесчитывания», так как он не является частью метода обращения к строке таблицы, а лишь используется для удаления некоторых строк уже поле того, как те были считаны. DB2 не выполняет удаление по подобным фильтрам явно, новы всегда можете рассчитывать, что DB2 сделает это при первой же возможности, как только получит данные, необходимые для оценки истинности условий фильтров. Так как в плане выполнения есть еще соединения после этого последнего соединения, DB2 будет выполнять их только для строк, которые прошли фильтр, отбрасывая остальные.
Предыдущая << 1 .. 36 37 38 39 40 41 < 42 > 43 44 45 46 47 48 .. 161 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100