Как ускорить INNER JOIN

_x_
Дата: 10.10.2003 13:50:15
DECLARE @cntall int


SELECT @cntall = COUNT(a3.[idc]) FROM [t_arxg3] a3

SELECT a2.[t_skr_id], a2.[t_kartg_id], a3.[t_vudop_id], SUM(a3.[sm]) as [sm], SUM(a2.[o_area]) as [o_area], COUNT(a3.[idc]) as [cnt]
FROM [t_arxg2] a2
INNER JOIN [t_arxg3] a3 ON a2.[kodls] = a3.[kodls]
WHERE a2.[prv] = 2
GROUP BY a2.[t_skr_id], a2.[t_kartg_id], a3.[t_vudop_id]


Все поля int, кроме ;)) [kodls] - char(6) : изменить нельзя (есть команда люминий!!)
Индексы по полям [t_skr_id], [t_kartg_id], [t_vudop_id], кластерный в запросе не учавствует
При просмотре плана запроса INNER съедает все 100% и то что он подцепился к индексу по [kodls] невидно
Можно ли как-то указать оптимизатору что нужно задействовать индексы по [kodls]?
iSestrin
Дата: 10.10.2003 13:56:36
есть хинт явного указания индекса в джойнах - index(ix_...)
_x_
Дата: 10.10.2003 14:35:37
А можно простенький пример, а то я в бол смотрю и кроме

< join_hint > ::=
{ LOOP | HASH | MERGE | REMOTE }

ничего нет. Есть index для view hints, но у меня он на него ругается...
iSestrin
Дата: 10.10.2003 14:44:36
в твоем запросе:

SELECT a2.[t_skr_id], a2.[t_kartg_id], a3.[t_vudop_id], SUM(a3.[sm]) as [sm], SUM(a2.[o_area]) as [o_area], COUNT(a3.[idc]) as [cnt]
FROM [t_arxg2] a2 with(index(ix_myindex))
INNER JOIN [t_arxg3] a3 ON a2.[kodls] = a3.[kodls]
WHERE a2.[prv] = 2
GROUP BY a2.[t_skr_id], a2.[t_kartg_id], a3.[t_vudop_id]
Glory
Дата: 10.10.2003 15:57:04
то что он подцепился к индексу по [kodls] невидно
А что видно ???

Например для такого запроса
select * 

from pub_info a
inner join dbo.publishers b on b.pub_id = a.pub_id

StmtText
------------------------------------------------------------------------------------------------------------------------------------------------

|--Compute Scalar(DEFINE:([a].[logo]=[a].[logo], [a].[pr_info]=[a].[pr_info]))

|--Nested Loops(Inner Join, OUTER REFERENCES:([a].[pub_id]))

|--Clustered Index Scan(OBJECT:([pubs].[dbo].[pub_info].[UPKCL_pubinfo] AS [a]))

|--Clustered Index Seek(OBJECT:([pubs].[dbo].[publishers].[UPKCL_pubind] AS [b]), SEEK:([b].[pub_id]=[a].[pub_id]) ORDERED FORWARD)

видно что сканируется pub_info, а в publishers делается аоиск по индексу

а вот здесь
select * 

from dbo.publishers a
inner join pub_info b on b.pub_id = a.pub_id

StmtText
-----------------------------------------------------------------------------------------------------------------------------------------------

|--Compute Scalar(DEFINE:([b].[logo]=[b].[logo], [b].[pr_info]=[b].[pr_info]))

|--Nested Loops(Inner Join, OUTER REFERENCES:([a].[pub_id]))

|--Clustered Index Scan(OBJECT:([pubs].[dbo].[publishers].[UPKCL_pubind] AS [a]))

|--Clustered Index Seek(OBJECT:([pubs].[dbo].[pub_info].[UPKCL_pubinfo] AS [b]), SEEK:([b].[pub_id]=[a].[pub_id]) ORDERED FORWARD)


уже наоборот.

А у вас что происходит ???