索引ヒントの使用方法

前の項では、両方の索引が適用可能でした。索引idx_incomeでは、問合せ条件income > 10000000を、この条件を満たす索引エントリと関連する表の行のみを取得する索引スキャンの開始点として使用できます。同様に、索引idx_ageでは、条件age < 40を索引スキャンの終了点として使用できます。SQL for Oracle NoSQL Databaseでは、2つの条件のうちいずれの優先度が高いかを判別できないため、各索引に同じ値を割り当て、最終的に名前がアルファベット順で先にある索引を選択します。前の例では、idx_ageが使用されました。かわりにidx_income索引を選択するには、索引ヒントを指定して問合せを作成する必要があります。

sql-> SELECT /*+ FORCE_INDEX(Persons idx_income) */ * from Persons
WHERE income > 10000000 and age < 40;

> Row 0                                              
 +-------------+--------------------------------------------+
 | id          | 3                                          |
 +-------------+--------------------------------------------+
 | firstname   | John                                       |
 +-------------+--------------------------------------------+
 | lastname    | Morgan                                     |
 +-------------+--------------------------------------------+
 | age         | 38                                         |
 +-------------+--------------------------------------------+
 | income      | 100000000                                  |
 +-------------+--------------------------------------------+
 | lastLogin   | 2016-11-29T08:21:35.4971                   |
 +-------------+--------------------------------------------+
 | address     | street                   | 187 Aspen Drive |
 |             | city                     | Middleburg      |
 |             | state                    | FL              |
 |             | zipcode                  | NULL            |
 |             | phones                                     |
 |             |     type                 | work            |
 |             |     areacode             | 305             |
 |             |     number               | 1234079         |
 |             |                                            |
 |             |     type                 | home            |
 |             |     areacode             | 305             |
 |             |     number               | 2066401         |
 +-------------+--------------------------------------------+
 | connections | 1                                          |
 |             | 4                                          |
 |             | 2                                          |
 +-------------+--------------------------------------------+
 | expenses    | food                     | 2000            |
 |             | gas                      | 10              |
 |             | travel                   | 700             |
 +-------------+--------------------------------------------+

1 row returned 

ここで示したように、ヒントは、SELECTキーワードの直後に配置する必要がある特殊なコメントとして記述されます。ヒントと通常のコメントを区別するものは、先頭の/*の直後に(スペースなしで)配置されている+文字です。