Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Использование индекса / 7 сообщений из 7, страница 1 из 1
22.11.2007, 15:09
    #34958603
Rust()
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса
Есть 2 таблицы:
Код: 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.
41.
42.
43.
44.
 CREATE TABLE "DB2ADMIN"."ATTRIBUTES"  (
		  "ID" BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY (  
		    START WITH + 1207040   
		    INCREMENT BY + 1   
		    MINVALUE + 0   
		    MAXVALUE + 1000000000000   
		    NO CYCLE  
		    CACHE  20   
		    NO ORDER ) , 
		  "ID_VAR" BIGINT NOT NULL , 
		  "ID_PROCESS" BIGINT NOT NULL , 
		  "VALUE_VAR" VARCHAR( 256 ) )   
		 IN "USERSPACE1" ; 

CREATE INDEX "DB2ADMIN"."QQQ" ON "DB2ADMIN"."ATTRIBUTES" 
		("ID_VAR" ASC)
		PCTFREE  10  CLUSTER MINPCTUSED  10 ;
ALTER TABLE "DB2ADMIN"."ATTRIBUTES" 
	ADD CONSTRAINT "CC1195719520266" PRIMARY KEY
		("ID");


CREATE TABLE "DB2ADMIN"."VARIABLES"  (
		  "ID_VAR" BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY (  
		    START WITH + 631   
		    INCREMENT BY + 1   
		    MINVALUE + 1   
		    MAXVALUE + 1000000   
		    NO CYCLE  
		    CACHE  20   
		    NO ORDER ) , 
		  "NAME_VAR" VARCHAR( 128 ) , 
		  "TYPE_VAR" VARCHAR( 32 ) , 
		  "ADDITION_VAR" VARCHAR( 2048 ) , 
		  "ID_TYPE_PROCESS" INTEGER NOT NULL WITH DEFAULT  0  , 
		  "VALUE_BY_DEFAULT" VARCHAR( 256 ) , 
		  "IS_ID" SMALLINT NOT NULL WITH DEFAULT  0  , 
		  "IS_MAIN" SMALLINT NOT NULL WITH DEFAULT  0  )   
		 IN "USERSPACE1" ; 

ALTER TABLE "DB2ADMIN"."VARIABLES" 
	ADD CONSTRAINT "PK_VARIABLES" PRIMARY KEY
		("ID_VAR");

выполняю запрос
Код: plaintext
1.
2.
3.
SELECT V.NAME_VAR, A.VALUE_VAR, V.TYPE_VAR, V.ADDITION_VAR, V.IS_ID, V.IS_MAIN
FROM DB2ADMIN.ATTRIBUTES AS A, DB2ADMIN.VARIABLES AS V
WHERE A.ID_PROCESS =  123456  AND V.ID_VAR = A.ID_VAR;
план доступа показывает (см. рисунок), что по обеим таблицам идет не индексированный доступ (команда TBSCAN). Пробовал создавать различные индексы, собирать статистику по таблицам, индексам, план не меняется. Что необходимо сделать для того чтобы запрос выполнялся по индексам 2-х таблиц?
...
Рейтинг: 0 / 0
22.11.2007, 15:29
    #34958715
gals
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса
Для таблицы ATTRIBUTES логично использовать сканирование таблицы. Не надо делать чтение индекса, т.к. в любом случае надо читать данные таблицы.

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

Когда, стоимость чтение индекса и поднятия страниц данных станет дешевле стоимости чтения всей таблицы, тогда БД будет использовать индекс.
...
Рейтинг: 0 / 0
22.11.2007, 16:24
    #34958997
Rust()
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса
но операция сканирования слишком дорогая, нельзя ли увеличить производительность такого запроса?
...
Рейтинг: 0 / 0
22.11.2007, 17:11
    #34959207
use-se
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса
может размер таблиц небольшой?
...
Рейтинг: 0 / 0
22.11.2007, 21:00
    #34959726
gals
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса
Размер таблицы может быть очень большим. Однако, СУБД может посчитать, что полное сканирование таблицы дешевле.
С такой штукой я сталкивался и при работе с Oracle, где количество записей в таблице было около 10^7.
На Oracle спасло ситуацию использование хинта - нужно быстрее получить первую запись. В этом случае СУБД оценивало, что получить быстрый ответ легче, если используется индекс. Суммарное время общей выборки получалось немного медленнее, нежели полное сканирование.

Исходя из вашего запроса, напрашивается использование индекса для ATTRIBUTES по полю ID_PROCESS.

Можно попробовать обмануть БД, написав предварительную выборку из объединения множеств индексов.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select ...
from ATTRIBUTES, VARIABLES, 
  (
   select ATTRIBUTES.ID_VAR from ATTRIBUTES, VARIABLES 
   where ATTRIBUTES.ID_VAR=VARIABLES.ID_VAR
  ) T
where ATTRIBUTES.ID_VAR=T.ID_VAR and VARIABLES.ID_VAR=T.ID_VAR and ...

Если оптимизатор шибко умный, он поймет, что его хотят надуть и возьмет полное сканирование.
В противном случе он для первой выборки воспользуется индексами.
...
Рейтинг: 0 / 0
23.11.2007, 09:41
    #34960188
Vladimir Kiselev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса
db2advis не пробовал?
Мы обычно его используем, потом смотрим какие индексы он хочет и т.п. Таким образом оптимизируем запросы, получается неплохо.
...
Рейтинг: 0 / 0
30.11.2007, 21:22
    #34979280
Kru
Kru
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Использование индекса
Недавно читал статью: http://www.dbazine.com/db2/db2-mfarticles/mullins-db2indexing

Там есть такая фраза: Sometimes, however, it can be advantageous to include additional columns in an index to increase the chances of index-only access. (Index-only access is discussed further in Chapter 21 “The Optimizer.”) For example, suppose that there is an index on the DEPTNO column of the DSN8810.DEPT table...

И ещё такой совет: keep creating indexes to enhance the performance of your queries until the performance of data modification becomes unacceptable. Then delete the last index you created.


Может быть Вам попробовать создать некластерный индекс по полям A.VALUE_VAR, V.ID_VAR, A.ID_PROCESS - я предполагаю что у A.VALUE_VAR минимальная селективность (cardinality).

Тогда оптимизатор, по-идее, должен "увидеть" возможность считать данные из индекса и соответственно выберет индекс.

Было бы интересно узнать результат.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Использование индекса / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]