Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Есть ли смысл создавать не ключевые и не кластерные индексы в MS SQL Server 7.0?
|
|||
|---|---|---|---|
|
#18+
Оказывается сервер автоматически создаёт индексы. Посмотреть все явные и не явные индексы можно так: 'Enterprise Manager'->'Tools'->'Wizards...'->'Database'->'Create Index Wizard' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2001, 08:34 |
|
||
|
Есть ли смысл создавать не ключевые и не кластерные индексы в MS SQL Server 7.0?
|
|||
|---|---|---|---|
|
#18+
Автоматически создается статистика, если включена соответсвующая опция для базы А статистика - это неиндекс, это Microsoft® SQL Server™ 2000 allows statistical information regarding the distribution of values in a column to be created. This statistical information can be used by the query processor to determine the optimal strategy for evaluating a query. When you create an index, SQL Server automatically stores statistical information regarding the distribution of values in the indexed column(s). The query optimizer in SQL Server uses these statistics to estimate the cost of using the index for a query. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2001, 08:47 |
|
||
|
Есть ли смысл создавать не ключевые и не кластерные индексы в MS SQL Server 7.0?
|
|||
|---|---|---|---|
|
#18+
Ну и еще автомаитчески создается кластерный (по умолчанию) индекс для primaty Key. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2001, 09:30 |
|
||
|
Есть ли смысл создавать не ключевые и не кластерные индексы в MS SQL Server 7.0?
|
|||
|---|---|---|---|
|
#18+
Конечно есть. Про это в BOL написано. Не кластерный хорошо подходит для поиска в большой таблице(обычно индексы по полям которые указаны в предложении WHERE), тогда как кластерный для выборки по диапазону и т.д. и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2001, 10:00 |
|
||
|
Есть ли смысл создавать не ключевые и не кластерные индексы в MS SQL Server 7.0?
|
|||
|---|---|---|---|
|
#18+
2 Slava: Откуда это интересно такое разделение - кластерный лучше для поиска по диапазону, некластерный по значению?? Кластерный для любых выборок будет эффективнее. Только вот он может быть всего один в таблице. Ну разве что если индексы уникальные (или мало повторяющихся значений в индексированном столбце), то эффективность будет одинаковой, но все равно не большей чем для некластерного индекса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2001, 10:34 |
|
||
|
Есть ли смысл создавать не ключевые и не кластерные индексы в MS SQL Server 7.0?
|
|||
|---|---|---|---|
|
#18+
2 Dmitry Неправда Ваша Slava прав, если в выборке учавствуют только те поля по которым построен индекс, то выборка по некластерному будет быстрее, потому что данные беруться из листьев индекса, а не из таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2001, 10:42 |
|
||
|
Есть ли смысл создавать не ключевые и не кластерные индексы в MS SQL Server 7.0?
|
|||
|---|---|---|---|
|
#18+
Ээээ... Ну ладно, признаю, что был не прав. Но и Slava ведь тоже не прав. Почему "Не кластерный хорошо подходит для поиска в большой таблице тогда как кластерный для выборки по диапазону"? Какая связь? Ваще то можно было бы еще сказать, что и для описанной Вами ситуации должно выполняться условие floor(размер_строки*число_выбранных_записей/8Кб) > floor(размер_индексированных_столбцов*число_выбранных_записей/8Кб), чтоб некластерный был эффективнее, но как ни крути, моя предыдущая реплика не всегда корректна... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2001, 14:10 |
|
||
|
Есть ли смысл создавать не ключевые и не кластерные индексы в MS SQL Server 7.0?
|
|||
|---|---|---|---|
|
#18+
Вот блин сервер сглюкнул, написал до фига, а теперь перенабирать лень 2 admin Уже несколько раз столкнулся с этим, сообщение не принимается из-за ограничения в 80 символов, добавка RE как раз превышает это ограничение 2 Dmitry В погибнувшем посте я писал, что Slava все равно прав, кластерный индекс очень хорошо помогает, если ограничение в выборке ставится на поле с низкой селективностью или когда Вы задаете диапазон значений ограничивающий выборку (between например), поскольку в случае кластерного индекса вы получаете отсортированную таблицу и сервер берет записи подряд, а не прыгает по ссылкам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2001, 17:04 |
|
||
|
Есть ли смысл создавать не ключевые и не кластерные индексы в MS SQL Server 7.0?
|
|||
|---|---|---|---|
|
#18+
Ну в натуре блин !!!! Вчера с вечера набрал много про то что я не прав, вроде запостил, а сегодня этого нет. Обидно до чертиков. Но я повторю вкартце хотя Генадий это и проговорил. Кластерный индекс диктует физический порядок хранения данных, так что сервер встречая первую запись из диапазона выбирает все следующие пока не дойдет до конца. Смало быть некластерный не диктует порядок хранения и как выразился Генадий сервер вынужден прыгать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2001, 01:38 |
|
||
|
Есть ли смысл создавать не ключевые и не кластерные индексы в MS SQL Server 7.0?
|
|||
|---|---|---|---|
|
#18+
2 Slava Кластерный индекс диктует физический порядок хранения данных, так что сервер встречая первую запись из диапазона выбирает все следующие пока не дойдет до конца. Вы когда-нибудь слово в словаре искали? Встречаете первое слово и потом перебираете все подряд пока не найдёте нужное? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2001, 05:40 |
|
||
|
Есть ли смысл создавать не ключевые и не кластерные индексы в MS SQL Server 7.0?
|
|||
|---|---|---|---|
|
#18+
Как то немного увлекса вчера не очень внимательно прочитал посты. >floor(размер_строки*число_выбранных_записей/8Кб) > floor(размер_индексированных_столбцов*число_выбранных_записей/8Кб), чтоб некластерный был эффективнее, но как ни крути, моя предыдущая реплика не всегда корректна... Откровенно говоря не понял формулы. Я, когда говорил, что некластерный индекс будет быстрее имел в виду следующую ситуацию select field1, field2 from table where field1 > n and field2 < m для выполнения запроса оптимизатор выберет некластерный индекс в том случае,если он построен по этим полям, причем будет выбран некластерный даже в том случае если по этм же полям существует класерный индекс. Почему "Не кластерный хорошо подходит для поиска в большой таблице тогда как кластерный для выборки по диапазону"? Вот здесь я тоже не уловил связи, причем тут большая, большая или маленькая не имеет большого значения, кроме того что на совсем маленькой таблице строить индексы бессмыслено, потому что скан все равно будет быстрее. 2 SergSuper Не понял реплики ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2001, 05:53 |
|
||
|
Есть ли смысл создавать не ключевые и не кластерные индексы в MS SQL Server 7.0?
|
|||
|---|---|---|---|
|
#18+
Насчет формулы: Эффективность определяется чем? Количеством считанных страниц (индексных и данных). Посчитаем сколько страниц будет считано на нижнем уровне (страницы данных для кластерного индекса или индексные страницы самого нижнего уровеня B-дерева для некластерного). На страницу данных влезает 8Кб/размер_строки строк. Т.е. одна строка занимает (размер_строки/8Кб)-ую часть страницы. Поэтому для кластерного индекса, для которого нижний уровень - страницы данных, нужно будет прочитать ceiling(число_выбранных_записей*размер_строки/8Кб) страницу. Для некластерного каждую строчку составляют только столбцы, входящие в индекс. Поэтому соответственно нужно прочитать ceiling(размер_индексированных_столбцов*число_выбранных_записей/8Кб) страниц. Чтобы неклстерный индекс был эффективнее, нужно чтоб число страниц считанных при использовании кластерного было больше числа страниц считанных при использовании некластерного, поэтому и получается: ceiling(размер_строки*число_выбранных_записей/8Кб) > ceiling(размер_индексированных_столбцов*число_выбранных_записей/8Кб) Число страниц В-дерева более высоких уровней для кластерного и некластерного индексов будет одинаковым, поэтому они в формулу не вошли. Вообще то для некластерного индекса, наверное стоило еще включить в размер строки размер ссылочки на строку в странице данных (file:page:slot), что может еще увеличит число считанных страниц, но тут я не совсем в курсе - для неуникального кластерного индекса для адресации строки используется индекс+GUID, который не виден для пользователя. В связи с этим встречный доп. вопрос - В отведенные 8060 байт размер этих GUID-ов входит? Если да, то и число страниц при исп. кластерного индекса увеличится. А выводы такие - неважно по диапазону ли была выборка или нет, но если селективность запроса небольшая, т.е. выбрано мало записей или же размер столбцов не вошедшие в индекс невелик то даже в случае если список выборки состоит только из столбцов индекса, то эффективность может оказаться одинаковой для кластерного и некластерного индекса. И если уж настаивать на предпочтении некластерного индекса, то все же именно для описанной Вами ситуации (да и то не всегда), когда список выборки состоит только из столбцов индекса, но не в зависимости применен ли для поиска дипазон или конкретное значение. Ведь вообще, число выбранных строк при поиске по значению может быть больше чем по диапозону - смотря какое значение и какой диапазон так что все равно "Карфаген должен пасть, а Slava не прав" как в первой части (с чем Вы уже согласились, Genady), так и во второй. P.S. В прошлый раз я написал вместо ceiling floor - запамятовал слегка, но суть от этого не меняестя ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2001, 09:34 |
|
||
|
Есть ли смысл создавать не ключевые и не кластерные индексы в MS SQL Server 7.0?
|
|||
|---|---|---|---|
|
#18+
>В отведенные 8060 байт размер этих GUID-ов входит? не входит Насчет первой части, так я ее просто не понял. Насчет второй не понимаю в чем неправ Слава, кластерный индекс рекомендуют использовать на столбцах с низкой селективностью, задавая диапазон значений Вы ее как раз и понижаете. >Ведь вообще, число выбранных строк при поиске по значению может быть больше чем по диапозону - смотря какое значение и какой диапазон Конечно может, поэтому и нельзя говорит об эффективности индекса отвлеченно от данных. Собственно я хотел сказать, что в этом утверждении Кластерный для любых выборок будет эффективнее. Вы неправы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2001, 10:14 |
|
||
|
Есть ли смысл создавать не ключевые и не кластерные индексы в MS SQL Server 7.0?
|
|||
|---|---|---|---|
|
#18+
Вот уж действительно с эти RE - уже в третий раз обламываюсь в этой ветке "кластерный индекс рекомендуют использовать на столбцах с низкой селективностью, задавая диапазон значений Вы ее как раз и понижаете." Что то я совсем запутался... Селективность столбца, как мне представляется - это отношение числа различных значений столбца к общему числу строк таблицы. Как это отношение может вообще зависеть от запроса? А если Вы имели ввиду селективность запроса, т.е. отношение числа полученных ми строк к общему числу строк таблицы, то задавая диапазон вместо конкретного значения мы ее наоборот увеличим, ане уменьшим... "Собственно я хотел сказать, что в этом утверждении Кластерный для любых выборок будет эффективнее. Вы неправы." Так я это уже признал - "Ну ладно, признаю, что был не прав" и "но как ни крути, моя предыдущая реплика не всегда корректна..." - это из моей реплики, последвавшей за Вашим первым замечанием ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2001, 11:25 |
|
||
|
Есть ли смысл создавать не ключевые и не кластерные индексы в MS SQL Server 7.0?
|
|||
|---|---|---|---|
|
#18+
Если я ничег не путаю, селективность это понятие относящееся к запросу. Чем выше селективность, тем выгоднее использовать индекс. Самая высокая селективность будет например у такого запроса select * from table where Field = N если значения поля Field уникальны. Если такие запросы выполняются на таблице постоянно, то по полю Field выгодно строить индекс, причем кластерный в данном случае будет эффективней, хотя его преимущество будет просто незаметно. Если же при тех же условиях у Вас часто нужно делать выборки такого типа select Field from table where Field = N то эффективней будет некластерный индекс. Немного изменим условия, нам нужны выборки такого рода select Field from table where Field between N and M В этом случае, обратите внимание селективность понижается, но от предидущего примера результат вряд ли будет отличаться, а вот в случае select * from table where Field between N and M оптимизатор (в случае некластерного индекса) может вообще перейти на скан таблицы. Понятно, что в этом случае эффективность кластерного как раз наоборот повышается Уфф, запарился уже набивать, короче, плюньте и запустите ITW ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2001, 12:19 |
|
||
|
Есть ли смысл создавать не ключевые и не кластерные индексы в MS SQL Server 7.0?
|
|||
|---|---|---|---|
|
#18+
Как я понимаю понятие селективности применимо как к запросу, так и к столбцу (или индексу). Поискав в BOL нашел только касательно столбцов (или индексов): Selectivity is a property that relates to how many rows are typically identified by a key value. A unique key has high selectivity; a key value found in 1,000 rows has poor selectivity. Но будем все же считать, что и к запросам тоже применимо... НО в моем понятии селективность запроса это то же самое что эффективность предиката ограничения и тогда селективность запроса select Field from table where Field between N and M выше чем у select Field from table where Field = N Тут мы расходимся в понятиях Может кто рассудит... Запрос select Field from table where Field = N при поставленном Вами условии уникальности индекса Field, будут иметь абсолютно одинаковую эффективность, поскольку надо выбрать всего 1 строку, т.е. почитать только 1 страницу на нижнем уровне как для кластерного так и для некластерного индекса. Так для запроса select Field from table where Field ='Петухов' для кластерного индекса: нужно прочитать страницы 4 и 8, а для некластерного страницы 4 и 2. -- Уфф, Genady, пусть Вам в будет не обидно, что запарились - я тоже запарился рисовать. Для неуникального индекса тут действительно будет эффективней некластерный индекс, но лишь при выполнении приведенной мной выше формулы. Но вобщем, смысл Вами сказанного ясен и не оспаривается. Только позволю себе еще раз заметить, что оспариваемая фраза (вторая ее часть) "Не кластерный хорошо подходит для поиска в большой таблице(обычно индексы по полям которые указаны в предложении WHERE), тогда как кластерный для выборки по диапазону" опровергается Вашим же примером: select Field from table where Field between N and M Наверное, стоит сказать "некластерный как правило лучше когда в списке выборки присутствуют только индексированные столбцы, а кластерный во всех остальных случаях". Может на этом сойдемся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2001, 17:56 |
|
||
|
Есть ли смысл создавать не ключевые и не кластерные индексы в MS SQL Server 7.0?
|
|||
|---|---|---|---|
|
#18+
2 Dmitry >Наверное, стоит сказать "некластерный как правило лучше когда в списке выборки присутствуют только индексированные столбцы, а кластерный во всех остальных случаях". Может на этом сойдемся? Конечно сойдемся, по моему мы все это время втолковывали друг другу одно и то же. Как то это мне напомнило спор глухого с немым P.S. Рисунки впечатлили, я на такой подвиг не способен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2001, 04:34 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32011914&tid=1825839]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 258ms |
| total: | 391ms |

| 0 / 0 |
