Оптимизация(использование индеков) в FoxPro (продолжение)В FoxPro как и в 1С допускается хранение индексов в файлах CDX.
CDX файл это не индекс , а «контейнер» хранящий несколько индексов по соответствующей таблице.
Русскоязычная статья по оптимизации –
http://www.foxclub.ru/articles/index.php?id=45(допонительно кому нужно «Русский Help для Visual FoxPro» включая функции
http://www.foxclub.ru/rhproject/project/ )
Основная статья по оптимизации (к сожалению на англ.)
"Using Rushmore Query Optimization to Speed Data Access"
http://msdn2.microsoft.com/en-us/library/1f5d2sa3(VS.80).aspxНаиболее важные моменты для оптимизации языка запросов.
Оптимизации поддаются предложения WHERE, JOIN, ORDER BY.
Создание базового Optimizable выражений
Основные оптимизируемые выражения могут быть одной из двух следующих форм :
eIndex relOp eExp
- или
eExpr relOp eIndex
Где
• eIndex - полностью соответствуют выражению в индексе.
• eExpr - является любое выражение и может включать переменные и поля от других, не связанных таблиц.
• relOp только следующие реляционные операторы: <, >, =, <=, >=, <>, #, ==, or != Вы также можете использовать ISNULL( ) , BETWEEN( ) , or INLIST( ) функции (или их эквиваленты SQL, как IS NULL и т.д.).
Очень важно понять, когда запросы будут оптимизированы и, когда они не будут. Visual FoxPro оптимизирует поиск условий, найдя точное соответствие между левой части выражение фильтра и индекса.
Если условие является сложным(много условий на таблицу), то такое сложное условие также может быть оптимизировано.
Р
езультат (оптимизация) при соединении выражений.
Basic Expression 1 Operator Basic Expression 2 Query Result
Optimizable AND Optimizable Fully Optimizable
Optimizable OR Optimizable Fully Optimizable
Optimizable AND Not Optimizable Partially Optimizable
Optimizable OR Not Optimizable Not Optimizable
Not Optimizable AND Not Optimizable Not Optimizable
Not Optimizable OR Not Optimizable Not Optimizable
— NOT Optimizable Fully Optimizable
— NOT Not Optimizable Not Optimizable
Рекомендации – первое условие должно быть полностью оптимизируемым, второе – желательно.
При соединении нескольких таблиц – первой должна быть наиболее оптимизируемая таблица с соответствующими оптимизирующими выражениями.