|
|
|
Оптимизатор запросов
|
|||
|---|---|---|---|
|
#18+
Оптимизатор запросов 6.5. Если я правильно понимаю, то кластерный индекс автоматически поддерживает возрастающий порядок сортироввки возращаемых строк по столбцу, для которого он был создан. Всегда ли можно получить строки отсортированные по этому индексу без использования ORDER BY field_name? Отрывок из книги меня сбивает с толку: "Например, если в таблице существуют два индекса - один клстерный, а другой некластерный, оптимизатор запроса может выбрать для выборки строк таблицы некластерный индекс. В этом случае в инструкцию SELECT можно включить предложение с режимами оптимизатора, которое заставит оптимизатор использовать кластерный индекс." Получается, что ORDER BY field_name нужно использовать всегда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.05.2002, 16:25 |
|
||
|
Оптимизатор запросов
|
|||
|---|---|---|---|
|
#18+
Использование индексов выбирается оптимизатором не только для сортировки, а для оптимизации выполнения запроса (обьединения, группировки и т.д.). В книге имеется ввиду, что оптимизатор будет пытатся составить оптимальный план для запроса, используя существующие индексы, или даже возможно не используя их, по многим критериям выбирая, какие индексы наиболее быстро позволят быстрее выполнить запрос. Однако вы сами можете указать оптимизатору, чтобы он использовал для выполнения запроса конкретные индексы, но это не гарантирует, что ваш предложенный план окажется эффективнее, чем план, предложенный оптимизатором. Для этой цели и существует просмотр плана, в котором будет легко понять, какой план лучше и где узкие места, которые неплохо бы соптимизировать. Оптимизатор в 6.5 конечно не так эффективен, чем в 2000, но прежде чем начинать играться в навязывание ему индексов неплохо бы попытаться для начала поиграться с самим запросом, написав его несколько версий, плюс проверить эффективность существующих индексов. А насчет ORDER BY вывод абсолютно очевиден - нет гарантии, что порядок сортировки всегда будет по кластерному ключу по умолчанию - если в SELECT нет ORDER BY, то записи будут возвращены как угодно, и их порядок будет зависеть от плана запроса. Так что если и хотите получать гарантированно отсортированный результат - ставьте ORDER BY всегда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2002, 08:42 |
|
||
|
Оптимизатор запросов
|
|||
|---|---|---|---|
|
#18+
4 ASCRUS Не сочтите за труд, ответье еще раз. Правильны ли мои выводы: Если оптимизатор выбирает записи из таблицы с помощью кластерного индекса, то они будут отсортированы по кластерному индексу в любом случае (даже если я не использую ORDER BY). То же самое произойдет если я сам "заставлю" оптимизатор выбирать записи по кластерному индексу. В любом другом случае надо использовть ORDER BY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2002, 11:35 |
|
||
|
Оптимизатор запросов
|
|||
|---|---|---|---|
|
#18+
Вывод неправильный. Селект без ORDER BY не гарантирует, что записи вернутся в порядке кластерного индекса. Чтобы не заниматься предсказаниями и плясками с бубном, в особенности в сложных запросах, всегда указывай. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2002, 04:40 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32031343&tid=1822572]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
179ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 489ms |

| 0 / 0 |
