AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
CRM
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.08.2010, 14:39   #1  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
одно меленькое замечание. не надо забывать ещё и про встроенный оптимизатор БД. иногда вроде по всем параметрам индекс подходит под ваш запрос (и по составу, и по порядку), но запрос все равно тормозит. А происходит это потому, что оптимизатор посчитал лучшем (на основе своей статистики) взять другой, менее селективный индекс. Лечится соответственно обновлением статистики.

P.S. я имел опыт такого поведения в ORACLE.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 30.08.2010, 14:51   #2  
ansoft is offline
ansoft
Участник
Аватар для ansoft
 
123 / 37 (2) +++
Регистрация: 20.10.2005
...в таком случае индекс назначается дерективой index
или фривольно index hint
Старый 30.08.2010, 14:56   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от ansoft Посмотреть сообщение
...в таком случае индекс назначается дерективой index
или фривольно index hint
Не совсем.
index просто отсортирует выборку в соответствии с полями, указанными в индексе
index hint порекомендует оптимизатору использовать именно указанный индекс
Старый 30.08.2010, 15:02   #4  
ansoft is offline
ansoft
Участник
Аватар для ansoft
 
123 / 37 (2) +++
Регистрация: 20.10.2005
...во как... не знал.
Спасибо за интересную информацию, только непонятно почему сортировка будет выполнена по индексу и при этом сам индекс возможно не будет использован... странно... кроме того при использовании директивы index аксапта ругается (exception) если такого индекса нет...
Старый 30.08.2010, 15:18   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от ansoft Посмотреть сообщение
...во как... не знал.
Спасибо за интересную информацию, только непонятно почему сортировка будет выполнена по индексу и при этом сам индекс возможно не будет использован... странно... кроме того при использовании директивы index аксапта ругается (exception) если такого индекса нет...
Сортировка будет выполнена не по индексу. Просто при конструировании запроса, посылаемого на сервер в директиве ORDER BY будут перчислены те поля, которые указаны в узле соответствующего индекса в Axapta.

К оптимизации запроса это не имеет никакого отношения. Это просто способ сокращенного написания ORDER BY. Соответственно, будет ругань, если такого индекса нет. Написали ключевое слово ORDER BY, а списка полей - нет.

А вот "index hint" - это как раз оптимизация. Точнее, рекомендация серверу по принципу "не будет ли любезен, многоуважаемый джин..." . Разумеется, "джин" может и отказаться.

Впрочему, "ручной тюнинг" (оптимизация) запросов при помощи хинтов, как правило, выходит "себе дороже". Лучше не использовать.
Старый 31.08.2010, 11:38   #6  
Skvorcal is offline
Skvorcal
Участник
 
36 / 10 (1) +
Регистрация: 16.08.2010
А как лучше поступить в следующей ситуации...

Есть таблица, в таблице куча полей, но 99% запросов фильтруют данные по двум полям.
При этом 33% запросов фильтруют данные по одному полю, 33% запросов фильтруют данные по другому полю, а оставшиеся 33% запросов фильтруют данные по двум полям одновременно.

В такой ситуации лучше построить два отдельных индекса по каждому полю, или один индекс по двум полям?

Последний раз редактировалось Skvorcal; 31.08.2010 в 11:41.
Старый 31.08.2010, 11:53   #7  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от Skvorcal Посмотреть сообщение
А как лучше поступить в следующей ситуации...

Есть таблица, в таблице куча полей, но 99% запросов фильтруют данные по двум полям.
При этом 33% запросов фильтруют данные по одному полю, 33% запросов фильтруют данные по другому полю, а оставшиеся 33% запросов фильтруют данные по двум полям одновременно.

В такой ситуации лучше построить два отдельных индекса по каждому полю, или один индекс по двум полям?
Создайте два индекса:
Индекс1
Поле1
Поле2

Индекс2
Поле2
Поле1
Старый 31.08.2010, 13:37   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Skvorcal Посмотреть сообщение
А как лучше поступить в следующей ситуации...

Есть таблица, в таблице куча полей, но 99% запросов фильтруют данные по двум полям.
При этом 33% запросов фильтруют данные по одному полю, 33% запросов фильтруют данные по другому полю, а оставшиеся 33% запросов фильтруют данные по двум полям одновременно.

В такой ситуации лучше построить два отдельных индекса по каждому полю, или один индекс по двум полям?
Если у вас MS SQL...
и если в нем включено автосоздание индексов...
то ничего не делайте.

подождите немножко, а потом посмотрите что MS SQL насоздавал.
потом примете решение.
__________________
полезное на axForum, github, vk, coub.
Старый 30.08.2010, 14:58   #9  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от ansoft Посмотреть сообщение
...в таком случае индекс назначается дерективой index
или фривольно index hint
так же в БД могут быть отключены хинты, т.е. что базе не посылай, она будет все равно пользоваться своим оптимизатором, игнорируя все указания из вне.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 30.08.2010, 15:04   #10  
ansoft is offline
ansoft
Участник
Аватар для ansoft
 
123 / 37 (2) +++
Регистрация: 20.10.2005
Согласен.
Старый 30.08.2010, 15:04   #11  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от ansoft Посмотреть сообщение
...в таком случае индекс назначается дерективой index
или фривольно index hint
кстати, про index и index hint уже обсуждалось вот здесь
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Теги
индекс, как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вопрос по резервированию Spiker DAX: Программирование 9 28.01.2010 09:19
Поле mandatory, а 0 вставить нужно Smith DAX: Программирование 5 15.06.2007 12:04
вычисляемое поле ZhanR DAX: Программирование 8 28.09.2006 10:25
Где взять материалы и еще один конкретный вопрос Andronov DAX: Программирование 6 19.02.2003 10:48
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:00.