powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Использование индекса в запросе....
22 сообщений из 22, страница 1 из 1
Использование индекса в запросе....
    #32883751
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите плиз....Мож я чего не так соображаю....
Есть таблица ~15-20 млн. записей....
Насчитываю сумму с группировкой записей по одному из полей, индекс по этому полю построен... Но в ExplainSQL этот индекс не отображается...
Как это понимать???
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32883898
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
встречные вопросы:
- этот самый запрос идет по всей таблице или только к определенной ее части?
- не используется ли в этом случае какой-либо другой индекс?

и, как вариант - добавте в тот самый ваш индекс то самое поле, сумму по которому подбиваете через INCLUDE, может тогда будет использоваться вообще только индекс.
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32884188
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хм... Вообще-то в запросе есть еще условие на группу записей......А вот индекса по полю с условием нет....
А что такое через INCLUDE??? это как, можно немного подробнее....
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32884202
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В смысле я правильно понял, что для sum(p1*p2) я должен в INCLUDE передавать и p1,и p2???
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32884245
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
create table t (id int,dt date, sm decimal(17,2), и еще куча полей)
create index iname on t (dt) include sm - поле sm входит в индекс но не входит в ключ индекса

select dt,sum(sm) from t where dt between :dtstart and :dtend group by dt
select sum(sm) from t where dt between :dtstart and :dtend
в этих запросах скорее всего саму таблицу оптимизатор вообще трогать не будет а возьмет и просканирует диапазон индекса, а сумму возьмет из индекса.
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32884319
kdima71
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как насчет MQT?
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32884336
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Построил отдельный индекс на поле, по которому задается условие...
ExplainSQL выдал результат еще медленнее...~ на 5%...
А чего такое за MQT?
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32884368
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще проблема... DB2 пишет, что INCLUDE работает только для уникальных ключей индекса:(
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32884454
kdima71
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TORTА чего такое за MQT?

Для оперативности я только процитирую следующее...
Administration Guide: Implementation Version 8.2, Chapter 4. Creating tables
and other related table objects, Creating a materialized query table (page 121)
A materialized query table (MQT) is a table whose definition is based on the result
of a query. As such, the materialized query table typically contains pre-computed
results based on the data existing in the table or tables that its definition
is based on. If the SQL compiler determines that a query will run more efficiently
against a materialized query table than the base table or tables, the query
executes against the materialized query table, and you obtain the result
faster than you otherwise would.


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

С уважением, kdima71.
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32884469
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Небольшое уточнение... Для версии 7.2 все вышеперечисленное подходит?
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32884521
kdima71
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я начал изучать DB2 c версии 8.2, поэтому могу процитировать только следующее...

[quot IBM DB2 Universal Database. What’s New Version 8. Chapter 3. Performance enhancements. Materialized query tables (page 28)]
...Prior to Version 8, DB2 UDB supported summary tables, also known as
automatic summary tables (ASTs). Summary tables are now considered to be a
special type of MQT whose fullselect contains a GROUP BY clause
summarizing data from the tables referenced in the fullselect.
[/quot

Я думаю, Вам необходимо познакомиться с этим поближе...

С уважением, kdima71.
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32884526
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вопросы:
-каждый подобный запрос обрабатывает какое количество строк из таблицы?
-статистика собрана (RUNSTATS)?
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32884551
kdima71
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения! Торопился...

Я начал изучать DB2 c версии 8.2, поэтому могу процитировать только следующее...

IBM DB2 Universal Database. What’s New Version 8. Chapter 3. Performance enhancements. Materialized query tables (page 28)
...Prior to Version 8, DB2 UDB supported summary tables, also known as
automatic summary tables (ASTs). Summary tables are now considered to be a
special type of MQT whose fullselect contains a GROUP BY clause
summarizing data from the tables referenced in the fullselect.


Я думаю, Вам необходимо познакомиться с этим поближе...

С уважением, kdima71.
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32884570
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каждый запрос достает ~10000-15000 записей....
Runstats собирал:)
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32884580
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каждый запрос достает ~10000-15000 записей....
Runstats собирал:)
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32884669
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное у тебя запрос параметризированный, попробуй вовспользоваться SELECTIVITY типа:

select * from .. where dt =:a selectivity 0.0001
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32884775
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо... Вроде отыскал где затуп был....
В общем я выбирал записи с условием
date(dts) between :DT1 and :DT2, где DT1 и DT2 были значениями типа date.
Дык вот DB2 из-за date(dts) не использовала индекс по dts.....
Пришлось переписать запрос....
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32885290
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что? Selectivity влияет на производительность???
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32885299
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
влияет на оптимизатор и построение плана запроса. причем сильно.
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32885559
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще у меня запрос следующего плана: в хранимке формируется строка, потом PREPARE, затем EXECUTE....Так что в явном виде параметры я вроде бы не подставляю.... Поможет selectivity в моем случае?
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32885569
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По какому критерию подбирать этот параметр (я все про selectivity)??
...
Рейтинг: 0 / 0
Использование индекса в запросе....
    #32886400
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
делаем:
db2set DB2_SELECTIVITY=Yes

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
connect to test@

create table ex (
	id int not null,
	name char( 30 ),
	constraint PK primary key (id)
)@

commit@
Записи в таблицу не добавляем (таблица пуста)
и смотрим платы запросов для:
Код: plaintext
1.
2.
select * from ex where id=? @
select * from ex where id=? selectivity  1 . 0  @

db2expln -d test -u db2admin ibmdb2 -t -g -z @ -f sel.pln

Код: 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.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
DB2 Universal Database Version  8 . 1 ,  5622 - 044  (c) Copyright IBM Corp.  1991 ,  2002 
Licensed Material - Program Property of IBM
IBM DB2 Universal Database SQL Explain Tool
DB2 Universal Database Version  8 . 1 ,  5622 - 044  (c) Copyright IBM Corp.  1991 ,  2002 
Licensed Material - Program Property of IBM
IBM DB2 Universal Database SQL Explain Tool

******************* DYNAMIC ***************************************

==================== STATEMENT ==========================================

	Isolation Level          = Cursor Stability
	Blocking                 = Block Unambiguous Cursors
	Query Optimization Class =  5 

	Partition Parallel       = No
	Intra-Partition Parallel = No

	SQL Path                 = "SYSIBM", "SYSFUN", "SYSPROC", "DB2ADMIN"


SQL Statement:
  
  select * 
  from ex 
  where id=?


Section Code Page =  1251 

Estimated Cost =  12 , 884914 
Estimated Cardinality =  1 , 000000 

Access Table Name = DB2ADMIN.EX  ID =  2 , 19 
|  Index Scan:  Name = SYSIBM.SQL050127105951350  ID =  1 
|  |  Regular Index (Not Clustered)
|  |  Index Columns:
|  |  |   1 : ID (Ascending)
|  #Columns =  1 
|  Single Record
|  Fully Qualified Unique Key
|  #Key Columns =  1 
|  |  Start Key: Inclusive Value
|  |  |  |   1 : ?
|  |  Stop Key: Inclusive Value
|  |  |  |   1 : ?
|  Data Prefetch: Eligible  0 
|  Index Prefetch: None
|  Lock Intents
|  |  Table: Intent Share
|  |  Row  : Next Key Share
|  Sargable Predicate(s)
|  |  Return Data to Application
|  |  |  #Columns =  2 
Return Data Completion

End of section


Optimizer Plan:

               RETURN 
               (    1 ) 
                 |    
               FETCH  
               (    2 ) 
              /      \
       IXSCAN        Table:   
       (    2 )        DB2ADMIN 
         |           EX       
 Index:             
 SYSIBM             
 SQL050127105951350 


==================== STATEMENT ==========================================

	Isolation Level          = Cursor Stability
	Blocking                 = Block Unambiguous Cursors
	Query Optimization Class =  5 

	Partition Parallel       = No
	Intra-Partition Parallel = No

	SQL Path                 = "SYSIBM", "SYSFUN", "SYSPROC", "DB2ADMIN"


SQL Statement:
  
  select * 
  from ex 
  where id=? selectivity  1 . 0 


Section Code Page =  1251 

Estimated Cost =  12 , 951826 
Estimated Cardinality =  1 , 000000 

Access Table Name = DB2ADMIN.EX  ID =  2 , 19 
|  #Columns =  1 
|  Single Record
|  Relation Scan
|  |  Prefetch: Eligible
|  Lock Intents
|  |  Table: Intent Share
|  |  Row  : Next Key Share
|  Sargable Predicate(s)
|  |  #Predicates =  1 
|  |  Return Data to Application
|  |  |  #Columns =  2 
Return Data Completion

End of section


Optimizer Plan:

  RETURN 
  (    1 ) 
    |    
  TBSCAN 
  (    2 ) 
    |    
 Table:   
 DB2ADMIN 
 EX       

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


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