Alex Ivanov
2005-03-18 09:12:07 UTC
Здравствуйте, Vasyl.
на 9.30 (где медленно)
QUERY:
------
select distinct x0.worker_no ,x1.cont_type_name ,x1.cont_company
,x1.cont_company_phone ,x0.contact from "informix".worker_contact
x0 ,"informix".contact_type x1 where ((x0.cont_type_no = x1.cont_type_no
) AND (x1.cont_type_name != 'Пейджер' ) )
Estimated Cost: 3154
Estimated # of Rows Returned: 2424
1) informix.x0: SEQUENTIAL SCAN
2) informix.x1: INDEX PATH
Filters: informix.x1.cont_type_name != 'Пейджер'
(1) Index Keys: cont_type_no (Serial, fragments: ALL)
Lower Index Filter: informix.x0.cont_type_no = informix.x1.cont_type_no
NESTED LOOP JOIN
на 7.30 (где быстро)
QUERY:
------
select distinct x0.worker_no ,x1.cont_type_name ,x1.cont_company
,x1.cont_company_phone ,x0.contact from "informix".worker_contact
x0 ,"informix".contact_type x1 where ((x0.cont_type_no = x1.cont_type_no
) AND (x1.cont_type_name != 'Пейджер' ) )
Estimated Cost: 3431
Estimated # of Rows Returned: 5334
1) www.x0: SEQUENTIAL SCAN
2) www.x1: SEQUENTIAL SCAN
Filters: www.x1.cont_type_name != 'Пейджер'
DYNAMIC HASH JOIN
Dynamic Hash Filters: www.x0.cont_type_no = www.x1.cont_type_no
В первом случае запрос выполнялся от informix'a а во втором - от www
Интересно у тебя получается :)
- сначала два запроса из одной таблицы
- потом выясняется, что есть еще связанная таблица
- потом выясняется, что запрос идет через представление
-....
давай как то остановимся на одном, пока без представлений (с ними отдельная
песня)
1. выполнялся ли сбор статистики по БД ?
update statistics high выполнен для всей базы- сначала два запроса из одной таблицы
- потом выясняется, что есть еще связанная таблица
- потом выясняется, что запрос идет через представление
-....
давай как то остановимся на одном, пока без представлений (с ними отдельная
песня)
1. выполнялся ли сбор статистики по БД ?
2. в данном запросе могут использоваться только индексы, построенные по
cont_type_no в обеих таблицах но только в случае, если оптимизатор что либо о
них знает
3. Для получения плана запроса надо поискать в доке и внимательно почитать о
фразе SET EXPLAIN
начиная с
"Use the SET EXPLAIN statement to display the query plan of optimizer, an
estimate of the number of rows returned, and the relative cost of the query...."
Планы выполнения запросовcont_type_no в обеих таблицах но только в случае, если оптимизатор что либо о
них знает
3. Для получения плана запроса надо поискать в доке и внимательно почитать о
фразе SET EXPLAIN
начиная с
"Use the SET EXPLAIN statement to display the query plan of optimizer, an
estimate of the number of rows returned, and the relative cost of the query...."
на 9.30 (где медленно)
QUERY:
------
select distinct x0.worker_no ,x1.cont_type_name ,x1.cont_company
,x1.cont_company_phone ,x0.contact from "informix".worker_contact
x0 ,"informix".contact_type x1 where ((x0.cont_type_no = x1.cont_type_no
) AND (x1.cont_type_name != 'Пейджер' ) )
Estimated Cost: 3154
Estimated # of Rows Returned: 2424
1) informix.x0: SEQUENTIAL SCAN
2) informix.x1: INDEX PATH
Filters: informix.x1.cont_type_name != 'Пейджер'
(1) Index Keys: cont_type_no (Serial, fragments: ALL)
Lower Index Filter: informix.x0.cont_type_no = informix.x1.cont_type_no
NESTED LOOP JOIN
на 7.30 (где быстро)
QUERY:
------
select distinct x0.worker_no ,x1.cont_type_name ,x1.cont_company
,x1.cont_company_phone ,x0.contact from "informix".worker_contact
x0 ,"informix".contact_type x1 where ((x0.cont_type_no = x1.cont_type_no
) AND (x1.cont_type_name != 'Пейджер' ) )
Estimated Cost: 3431
Estimated # of Rows Returned: 5334
1) www.x0: SEQUENTIAL SCAN
2) www.x1: SEQUENTIAL SCAN
Filters: www.x1.cont_type_name != 'Пейджер'
DYNAMIC HASH JOIN
Dynamic Hash Filters: www.x0.cont_type_no = www.x1.cont_type_no
В первом случае запрос выполнялся от informix'a а во втором - от www
Ты бы лучше показал план выполнения запроса на обоих машинах, а потом уже
можнообсуждать ...
Есть такая проблема. Есть таблица из 10000 записей, созданы индексы,
проверена валидность индексов (ончеком). Запускаю запрос вида
select distinct .... из этой таблицы. Результаты выдаются через 15
сек. (Это все на solaris/sparc/ids9.30). Тот же самый запрос на
intel/sco/ids7.31 выдает почти мгновенно. Причем когда на 9.30 запрос
запускаешь, резко возрастает ожидание ввода-вывода. Это может
говорить о том, что индексы не работают, но они проверены. Онконфиг и
статистика прилагается.
А по плану выполнения запроса что нужно сделать?
Есть такая проблема. Есть таблица из 10000 записей, созданы индексы,
проверена валидность индексов (ончеком). Запускаю запрос вида
select distinct .... из этой таблицы. Результаты выдаются через 15
сек. (Это все на solaris/sparc/ids9.30). Тот же самый запрос на
intel/sco/ids7.31 выдает почти мгновенно. Причем когда на 9.30 запрос
запускаешь, резко возрастает ожидание ввода-вывода. Это может
говорить о том, что индексы не работают, но они проверены. Онконфиг и
статистика прилагается.
А по плану выполнения запроса что нужно сделать?
--
С уважением,
Alex Ivanov mailto:***@narod.ru
С уважением,
Alex Ivanov mailto:***@narod.ru