|
|
|
count и индексы
|
|||
|---|---|---|---|
|
#18+
Обратил внимание на такую штуку, делаю запрос Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. смотрю на план, и вижу что используется индекс. Так вот мне и интересно, как 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])) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2002, 12:31:52 |
|
||
|
count и индексы
|
|||
|---|---|---|---|
|
#18+
насколько я знаю, SQL Server не использует индексы для таблиц, размер которых, меньше 8 Mb. Он такие таблицы сканирует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2002, 12:45:57 |
|
||
|
count и индексы
|
|||
|---|---|---|---|
|
#18+
Если в таблице есть кластерный индекс, то сканирование таблицы заменяется сканированием этого кластерного индекса (т.к. в этом случае смысла в сканировании таблицы нет никакого). Кластерный индекс это по сути и есть сама таблица. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2002, 12:46:01 |
|
||
|
count и индексы
|
|||
|---|---|---|---|
|
#18+
не 8 Мб, а 8Кб-одна страница данных. Если табличка маленькая (типа пять записей) :), то индекс будет только лишнее место занимать, и не факт, что это будет быстрее чем без индекса... Короче говоря, я бы не стал создавать индекс в данном случае - все таблица умещается в одну страницу памяти ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2002, 12:50:59 |
|
||
|
count и индексы
|
|||
|---|---|---|---|
|
#18+
2AVL это просто пример, а так любая таблица. 2antonz таки ведь использует же :)) я ж даже план привел... Я вот тут что подумал, мне кажется, что при сканировании индекса, на предмет количества записей, надо обработать меньше информации (количество операций ввода/вывода, используемой памяти), чем при сканировании таблицы. Или я не прав? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2002, 13:02:29 |
|
||
|
count и индексы
|
|||
|---|---|---|---|
|
#18+
2AVL "ну да" это к тому что я прав или что я сомневаюсь в правоте, и правильно делаю? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2002, 13:29:05 |
|
||
|
count и индексы
|
|||
|---|---|---|---|
|
#18+
при использовании индексов кол-во I/O уменьшается. Только надо чтобы использовался верный индекс - кластерный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2002, 13:33:07 |
|
||
|
count и индексы
|
|||
|---|---|---|---|
|
#18+
Так вот мне и интересно, как SQL использует индекс при таком запросе?вроде бы ему все равно всю таблицу сканировать, или он её как то по особому сканирует? BOL - Optimizing Database Performance - Query Tuning - Analyzing a Query - Logical and Physical Operators - Clustered Index Scan/Index Scan ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2002, 13:35:30 |
|
||
|
count и индексы
|
|||
|---|---|---|---|
|
#18+
вот еще BOL: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2002, 13:38:45 |
|
||
|
count и индексы
|
|||
|---|---|---|---|
|
#18+
2antonz: цифра 8 Mb имеет место быть в другом случае - при создании индексной статистики. Для статистики указывается объем данных (в %), который надо сэмплировать, но если таблица меньше 8 Mb, то она всегда "пробегается" целиком. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2002, 13:46:07 |
|
||
|
count и индексы
|
|||
|---|---|---|---|
|
#18+
2 AVL. >не 8 Мб, а 8Кб-одна страница данных. Если табличка маленькая (типа пять записей) :), то индекс будет только лишнее место занимать, и не факт, что это будет быстрее чем без индекса... Короче говоря, я бы не стал создавать индекс в данном случае - все таблица умещается в одну страницу памяти А если данные умещаются в 2 страницы нужен индекс? Прочитаем страницу индекса проанализировав ее высним нужную нам страницу и прочитаем ее (в итоге все равно читаем две страницы). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2002, 14:51:39 |
|
||
|
count и индексы
|
|||
|---|---|---|---|
|
#18+
такие "пограничные" задачи всегда интересны :) что-то у меня пока в башку ничего не лезет...гмм...я не уверен, что будет прирост производительности при использовании индекса для 2 страниц данных... может тут еще и fillfactor сыграет, в итоге получится, что индекс займет 3 страницы. Однозначно у нас объем индекса сравним с объемом всей таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2002, 08:27:53 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32064503&tid=1819084]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 218ms |
| total: | 359ms |

| 0 / 0 |
