powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / count и индексы
13 сообщений из 13, страница 1 из 1
count и индексы
    #32064482
fima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обратил внимание на такую штуку, делаю запрос
Код: 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
count и индексы
    #32064489
antonz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько я знаю, SQL Server не использует индексы для таблиц, размер которых, меньше 8 Mb. Он такие таблицы сканирует.
...
Рейтинг: 0 / 0
count и индексы
    #32064490
mishgan2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если в таблице есть кластерный индекс, то сканирование таблицы заменяется сканированием этого кластерного индекса (т.к. в этом случае смысла в сканировании таблицы нет никакого). Кластерный индекс это по сути и есть сама таблица.
...
Рейтинг: 0 / 0
count и индексы
    #32064496
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не 8 Мб, а 8Кб-одна страница данных. Если табличка маленькая (типа пять записей) :), то индекс будет только лишнее место занимать, и не факт, что это будет быстрее чем без индекса...
Короче говоря, я бы не стал создавать индекс в данном случае - все таблица умещается в одну страницу памяти
...
Рейтинг: 0 / 0
count и индексы
    #32064503
fima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2AVL это просто пример, а так любая таблица.
2antonz таки ведь использует же :)) я ж даже план привел...
Я вот тут что подумал, мне кажется, что при сканировании индекса, на предмет количества записей, надо обработать меньше информации (количество операций ввода/вывода, используемой памяти), чем при сканировании таблицы. Или я не прав?
...
Рейтинг: 0 / 0
count и индексы
    #32064521
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну да
...
Рейтинг: 0 / 0
count и индексы
    #32064526
fima
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2AVL "ну да" это к тому что я прав или что я сомневаюсь в правоте, и правильно делаю? :)
...
Рейтинг: 0 / 0
count и индексы
    #32064530
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при использовании индексов кол-во I/O уменьшается. Только надо чтобы использовался верный индекс - кластерный.
...
Рейтинг: 0 / 0
count и индексы
    #32064532
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так вот мне и интересно, как SQL использует индекс при таком запросе?вроде бы ему все равно всю таблицу сканировать, или он её как то по особому сканирует?

BOL - Optimizing Database Performance - Query Tuning - Analyzing a Query - Logical and Physical Operators - Clustered Index Scan/Index Scan
...
Рейтинг: 0 / 0
count и индексы
    #32064535
Фотография AVL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот еще 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
count и индексы
    #32064545
Фотография Гнездин Петр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2antonz: цифра 8 Mb имеет место быть в другом случае - при создании индексной статистики. Для статистики указывается объем данных (в %), который надо сэмплировать, но если таблица меньше 8 Mb, то она всегда "пробегается" целиком.
...
Рейтинг: 0 / 0
count и индексы
    #32064598
2 AVL.
>не 8 Мб, а 8Кб-одна страница данных. Если табличка маленькая (типа пять записей) :), то индекс будет только лишнее место занимать, и не факт, что это будет быстрее чем без индекса...
Короче говоря, я бы не стал создавать индекс в данном случае - все таблица умещается в одну страницу памяти

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


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