Discussion:
Re[4]: медленно работает select
(слишком старое сообщение для ответа)
Alex Ivanov
2005-03-18 09:12:07 UTC
Permalink
Здравствуйте, Vasyl.
Интересно у тебя получается :)
- сначала два запроса из одной таблицы
- потом выясняется, что есть еще связанная таблица
- потом выясняется, что запрос идет через представление
-....
давай как то остановимся на одном, пока без представлений (с ними отдельная
песня)
1. выполнялся ли сбор статистики по БД ?
update statistics high выполнен для всей базы
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...."
Планы выполнения запросов

на 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 запрос
запускаешь, резко возрастает ожидание ввода-вывода. Это может
говорить о том, что индексы не работают, но они проверены. Онконфиг и
статистика прилагается.
А по плану выполнения запроса что нужно сделать?
--
С уважением,
Alex Ivanov mailto:***@narod.ru
Alexey Kirich
2005-03-21 07:04:59 UTC
Permalink
ðÒÉ×ÅÔ !

á ÐÏÐÒÏÂÕÊ-ËÁ ÐÏÍÅÎÑÔØ ÚÁÐÒÏÓ ÔÁË, ÞÔÏÂÙ ×Ï FROM ÛÌÁ ÓÎÁÞÁÌÁ Ô×ÏÑ ÔÁÂÌÉÞËÁ
X1 (ÐÏ ËÏÔÏÒÏÊ ÅÝÅ ÆÉÌØÔÒ ÎÁËÌÁÄÙ×ÁÅÔÓÑ, Á ÐÏÔÏÍ ÕÖÅ X0)

é × SELECT ÄÏÂÁ×ÉÔØ HINT - ORDERED.

é ÐÒÏ×ÅÒÉÔØ ÜÔÏ ÎÁ 9ËÅ. é ÐÏÓÍÏÔÒÅÔØ ÎÁ ÐÌÁÎ.


"Alex Ivanov" <***@narod.ru> wrote in message news:***@narod.ru...
úÄÒÁ×ÓÔ×ÕÊÔÅ, Vasyl.
éÎÔÅÒÅÓÎÏ Õ ÔÅÂÑ ÐÏÌÕÞÁÅÔÓÑ :)
- ÓÎÁÞÁÌÁ Ä×Á ÚÁÐÒÏÓÁ ÉÚ ÏÄÎÏÊ ÔÁÂÌÉÃÙ
- ÐÏÔÏÍ ×ÙÑÓÎÑÅÔÓÑ, ÞÔÏ ÅÓÔØ ÅÝÅ Ó×ÑÚÁÎÎÁÑ ÔÁÂÌÉÃÁ
- ÐÏÔÏÍ ×ÙÑÓÎÑÅÔÓÑ, ÞÔÏ ÚÁÐÒÏÓ ÉÄÅÔ ÞÅÒÅÚ ÐÒÅÄÓÔÁ×ÌÅÎÉÅ
-....
ÄÁ×ÁÊ ËÁË ÔÏ ÏÓÔÁÎÏ×ÉÍÓÑ ÎÁ ÏÄÎÏÍ, ÐÏËÁ ÂÅÚ ÐÒÅÄÓÔÁ×ÌÅÎÉÊ (Ó ÎÉÍÉ
ÏÔÄÅÌØÎÁÑ
ÐÅÓÎÑ)
1. ×ÙÐÏÌÎÑÌÓÑ ÌÉ ÓÂÏÒ ÓÔÁÔÉÓÔÉËÉ ÐÏ âä ?
update statistics high ×ÙÐÏÌÎÅÎ ÄÌÑ ×ÓÅÊ ÂÁÚÙ
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...."
ðÌÁÎÙ ×ÙÐÏÌÎÅÎÉÑ ÚÁÐÒÏÓÏ×

ÎÁ 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 ÚÁÐÒÏÓ
ÚÁÐÕÓËÁÅÛØ, ÒÅÚËÏ ×ÏÚÒÁÓÔÁÅÔ ÏÖÉÄÁÎÉÅ ××ÏÄÁ-×Ù×ÏÄÁ. üÔÏ ÍÏÖÅÔ
ÇÏ×ÏÒÉÔØ Ï ÔÏÍ, ÞÔÏ ÉÎÄÅËÓÙ ÎÅ ÒÁÂÏÔÁÀÔ, ÎÏ ÏÎÉ ÐÒÏ×ÅÒÅÎÙ. ïÎËÏÎÆÉÇ É
ÓÔÁÔÉÓÔÉËÁ ÐÒÉÌÁÇÁÅÔÓÑ.
á ÐÏ ÐÌÁÎÕ ×ÙÐÏÌÎÅÎÉÑ ÚÁÐÒÏÓÁ ÞÔÏ ÎÕÖÎÏ ÓÄÅÌÁÔØ?
--
ó Õ×ÁÖÅÎÉÅÍ,
Alex Ivanov mailto:***@narod.ru

Loading...