Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / count и индексы / 13 сообщений из 13, страница 1 из 1
04.11.2002, 12:31:52
    #32064482
fima
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и индексы
Обратил внимание на такую штуку, делаю запрос
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create table test
(
	f int
)
create clustered index index_test on test(f)
insert into test values ( 1 )
insert into test values ( 2 )
insert into test values ( 3 )
insert into test values ( 4 )
insert into test values ( 5 )
go
select *, (select count(*) from test)
from test
go
drop table test

смотрю на план, и вижу что используется индекс. Так вот мне и интересно, как SQL использует индекс при таком запросе? вроде бы ему все равно всю таблицу сканировать, или он её как то по особому сканирует?
Вот сам нехитрый план
StmtText
--------------------------------------------------------------------------------------------------
|--Compute Scalar(DEFINE:([Expr1002]=[Expr1002]))
|--Nested Loops(Inner Join)
|--Compute Scalar(DEFINE:([Expr1002]=Convert([Expr1010])))
| |--Stream Aggregate(DEFINE:([Expr1010]=Count(*)))
| |--Clustered Index Scan(OBJECT:([Tomagochi_v_2].[dbo].[test].[index_test]))
|--Clustered Index Scan(OBJECT:([Tomagochi_v_2].[dbo].[test].[index_test]))
...
Рейтинг: 0 / 0
04.11.2002, 12:45:57
    #32064489
antonz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и индексы
насколько я знаю, SQL Server не использует индексы для таблиц, размер которых, меньше 8 Mb. Он такие таблицы сканирует.
...
Рейтинг: 0 / 0
04.11.2002, 12:46:01
    #32064490
mishgan2000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и индексы
Если в таблице есть кластерный индекс, то сканирование таблицы заменяется сканированием этого кластерного индекса (т.к. в этом случае смысла в сканировании таблицы нет никакого). Кластерный индекс это по сути и есть сама таблица.
...
Рейтинг: 0 / 0
04.11.2002, 12:50:59
    #32064496
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и индексы
не 8 Мб, а 8Кб-одна страница данных. Если табличка маленькая (типа пять записей) :), то индекс будет только лишнее место занимать, и не факт, что это будет быстрее чем без индекса...
Короче говоря, я бы не стал создавать индекс в данном случае - все таблица умещается в одну страницу памяти
...
Рейтинг: 0 / 0
04.11.2002, 13:02:29
    #32064503
fima
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и индексы
2AVL это просто пример, а так любая таблица.
2antonz таки ведь использует же :)) я ж даже план привел...
Я вот тут что подумал, мне кажется, что при сканировании индекса, на предмет количества записей, надо обработать меньше информации (количество операций ввода/вывода, используемой памяти), чем при сканировании таблицы. Или я не прав?
...
Рейтинг: 0 / 0
04.11.2002, 13:23:03
    #32064521
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и индексы
ну да
...
Рейтинг: 0 / 0
04.11.2002, 13:29:05
    #32064526
fima
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и индексы
2AVL "ну да" это к тому что я прав или что я сомневаюсь в правоте, и правильно делаю? :)
...
Рейтинг: 0 / 0
04.11.2002, 13:33:07
    #32064530
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и индексы
при использовании индексов кол-во I/O уменьшается. Только надо чтобы использовался верный индекс - кластерный.
...
Рейтинг: 0 / 0
04.11.2002, 13:35:30
    #32064532
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и индексы
Так вот мне и интересно, как SQL использует индекс при таком запросе?вроде бы ему все равно всю таблицу сканировать, или он её как то по особому сканирует?

BOL - Optimizing Database Performance - Query Tuning - Analyzing a Query - Logical and Physical Operators - Clustered Index Scan/Index Scan
...
Рейтинг: 0 / 0
04.11.2002, 13:38:45
    #32064535
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и индексы
вот еще BOL:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Before creating clustered indexes, understand how your data will be accessed. Consider using a clustered index for: 

Columns that contain a large number of distinct values.


Queries that return a range of values using operators such as BETWEEN, >, >=, <, and <=.


Columns that are accessed sequentially.


Queries that return large result sets.


Columns that are frequently accessed by queries involving join or GROUP BY clauses; typically these are foreign key columns. An index on the column(s) specified in the ORDER BY or GROUP BY clause eliminates the need for SQL Server to sort the data because the rows are already sorted. This improves query performance.


OLTP-type applications where very fast single row lookup is required, typically by means of the primary key. Create a clustered index on the primary key. 
...
Рейтинг: 0 / 0
04.11.2002, 13:46:07
    #32064545
Гнездин Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и индексы
2antonz: цифра 8 Mb имеет место быть в другом случае - при создании индексной статистики. Для статистики указывается объем данных (в %), который надо сэмплировать, но если таблица меньше 8 Mb, то она всегда "пробегается" целиком.
...
Рейтинг: 0 / 0
04.11.2002, 14:51:39
    #32064598
count и индексы
2 AVL.
>не 8 Мб, а 8Кб-одна страница данных. Если табличка маленькая (типа пять записей) :), то индекс будет только лишнее место занимать, и не факт, что это будет быстрее чем без индекса...
Короче говоря, я бы не стал создавать индекс в данном случае - все таблица умещается в одну страницу памяти

А если данные умещаются в 2 страницы нужен индекс? Прочитаем страницу индекса проанализировав ее высним нужную нам страницу и прочитаем ее (в итоге все равно читаем две страницы).
...
Рейтинг: 0 / 0
05.11.2002, 08:27:53
    #32064768
AVL
AVL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
count и индексы
такие "пограничные" задачи всегда интересны :) что-то у меня пока в башку ничего не лезет...гмм...я не уверен, что будет прирост производительности при использовании индекса для 2 страниц данных... может тут еще и fillfactor сыграет, в итоге получится, что индекс займет 3 страницы. Однозначно у нас объем индекса сравним с объемом всей таблицы
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / count и индексы / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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