Для того, чтобы принять решение по оптимизации для представления или запроса, вам требуется знать план исполнения: порядок, в котором оцениваются опции объединения и фильтра. Используя функцию SYS(3054), вы можете отобразить один из трех уровней оптимизации Rushmore. Три уровня указывают степень, в которой условия фильтра или объединения были бы способны использовать оптимизацию Rushmore. Уровнями оптимизации являются "полная" (Full), частичная (Partial) или условия не являются оптимизируемыми вовсе (None).

To display the execution plan for filters

  1. В окне Command , впечатайте SYS(3054,1) для включения в работу SQL ShowPlan.

  2. Впечатайте ваше предложение SQL SELECT.

    Например, вы можете напечатать:

     CopyCode imageСкопировать код
    SELECT * FROM customer, orders ;
    AND Upper(country) = "MEXICO"
  3. Прочитайте на экране план исполнения.

    Для этого примера на экране могло быть отражено приведенное ниже:

     CopyCode imageСкопировать код
    Using Index Tag Country to optimize table customer
    Rushmore Optimization Level for table customer: Full
    Rushmore Optimization level for table orders: none
  4. В окне Command впечатайте SYS(3054,0) для отключения SQL ShowPlan.

Вы можете, затем, послать SYS функции значение 11  для оценки объединения в опциях FROM или WHERE.

Для отображения плана исполнения для объединений

  1. В окне Command впечатайте SYS(3054,11) для включения в работе SQL ShowPlan.

  2. Впечатайте ваше предложение SQL SELECT.

    Например, вы можете напечатать:

     CopyCode imageСкопировать код
    SELECT * ;
    FROM customer INNER JOIN orders ;
       ON customer.cust_id = orders.cust_id ;
    WHERE Upper(country) = "MEXICO"
  3. Прочитайте на экране план исполнения.

    Для этого примера на экране могло быть отражено приведенное ниже:

     CopyCode imageСкопировать код
    Using Index Tag Country to optimize table customer
    Rushmore Optimization Level for table customer: Full
    Rushmore Optimization level for table orders: none
    Joining table customer and table orders using Cust_id
  4. В окне Command впечатайте SYS(3054,0) для отключения SQL ShowPlan.

Управление оценкой объединения

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

Для принуждения порядка оценки объединения

  • Введите ключевое слово FORCE и поместите ваши условия объединения в опцию FROM.

    NoteЗамечание

    Отметьте, что условия объединения, помещенные в опции WHERE не включаются в принудительную оценку объединения.

NoteЗамечание

Вы не можете использовать ключевое слово FORCE в предложениях сквозных запросов SQL pass-through или с удаленными представлениями, так как это ключевое слово является расширением стандарта ANSI со стороны Visual FoxPro и не поддерживается в других словарях SQL. Опция FORCE является глобальной и поэтому применяется ко всем таблицам, включенным в опцию JOIN. Убедитесь, что порядок в котором появляются объединяемые таблицы строго соответствует порядку, в котором они должны быть объединены. Вы можете, кроме того, использовать круглые скобки для управления порядком исполнения объединений.

В этом примере, первое указанное объединения является, кроме того, первым оцениваемым объединением. Сначала таблица Customer объединяется с таблицей Orders. Результат этого объединения затем объединяется с таблицей OrdItems:

 CopyCode imageСкопировать код
SELECT * ;
   FROM FORCE Customers ;
   INNER JOIN Orders ;
      ON Orders.Company_ID = Customers.Company_ID ;
   INNER JOIN OrItems;
      ON OrdItems.Order_NO = Orders.Order_NO 

В этом примере, первым оценивается объединение внутри круглых скобок для таблиц Orders и OrdItems. Результат этого объединения затем используется для оценки объединения с таблицей Customers:

 CopyCode imageСкопировать код
SELECT * ;
FROM FORCE Customers ;
   INNER JOIN (orders INNER JOIN OrdItems ;
      ON OrdItems.Order_No = Orders.Order_No) ;
      ON Orders.Company_ID = Customers.Company_ID

Смотрите также