|
![]() |
#1 |
Участник
|
Еще один пример бездумного использования хинтов.
1.Применяем хинты и изменяем порядок joinoв SQL Server Execution Times: CPU time = 50 ms, elapsed time = 68 ms. SELECT A.ITEMID,SUM(B.AVAILPHYSICAL),MIN(B.INVENTDIMID),B.ITEMID,C.INVENTLOCATIONID FROM [bmssa].INVENTDIM C(INDEX(I_698DIMIDIDX)NOLOCK), [bmssa].INVENTSUM B (NOLOCK), [bmssa].INVENTTABLE A(NOLOCK) WHERE (A.DATAAREAID='dat') AND ((B.DATAAREAID='dat') AND (A.ITEMID=B.ITEMID)) AND ((C.DATAAREAID='dat') AND (B.INVENTDIMID=C.INVENTDIMID)) GROUP BY A.ITEMID,B.ITEMID,C.INVENTLOCATIONID ORDER BY A.ITEMID,B.ITEMID,C.INVENTLOCATIONID OPTION(--FAST 1, FORCE ORDER) Table 'INVENTTABLE'. Scan count 50, logical reads 103, physical reads 4, read-ahead reads 0. Table 'INVENTSUM'. Scan count 8, logical reads 58, physical reads 4, read-ahead reads 0. Table 'INVENTDIM'. Scan count 1, logical reads 9, physical reads 2, read-ahead reads 0. SQL Server Execution Times: CPU time = 10 ms, elapsed time = 92 ms. ------------------------------------------------------------------------------------------------ 2. Без хинтов SQL Server Execution Times: CPU time = 50 ms, elapsed time = 62 ms. SELECT A.ITEMID,SUM(B.AVAILPHYSICAL),MIN(B.INVENTDIMID),B.ITEMID,C.INVENTLOCATIONID FROM [bmssa].INVENTTABLE A(NOLOCK) ,[bmssa].INVENTSUM B(NOLOCK) ,[bmssa].INVENTDIM C(NOLOCK) WHERE (A.DATAAREAID='dat') AND ((B.DATAAREAID='dat') AND (A.ITEMID=B.ITEMID)) AND ((C.DATAAREAID='dat') AND (B.INVENTDIMID=C.INVENTDIMID)) GROUP BY A.ITEMID,B.ITEMID,C.INVENTLOCATIONID ORDER BY A.ITEMID,B.ITEMID,C.INVENTLOCATIONID (50 row(s) affected) Table 'INVENTTABLE'. Scan count 50, logical reads 103, physical reads 4, read-ahead reads 0. Table 'INVENTSUM'. Scan count 8, logical reads 58, physical reads 4, read-ahead reads 0. Table 'INVENTDIM'. Scan count 1, logical reads 9, physical reads 2, read-ahead reads 0. SQL Server Execution Times: CPU time = 30 ms, elapsed time = 92 ms. SQL Server parse and compile time: CPU time = 0 ms, elapsed time = 0 ms. Те кол-во чтений тоже, но время выполнения уменьшилось.К сожалению,у меня тестовая БД с меньшим объемом поэтому результаты могут отличаться. Цитата:
не спорю, но как правило, выдает гораздо чаще, чем не выдает
Возможно, я не совсем правильно понял автора, если призывается вдумчиво использовать подсказки, которые на разных объемах работаю по-разному, то я полностью согласен.На мой взгляд, это последнее средство для оптимизации, прежде всего: правильная структура БД, индексов(для этого запроса напрашиваются кластерные индексы, которых нет, что в общем - моветон) и тд. |
|