2017-05-19 4 views
0

私は...インデックスは、テーブルのために働くんどの方法を知っているインデックスと

が、私は、私は次のように発射する場合、インデックスはどんな役割を果たし、この場合には、カラム得意先の声明とインデックスに参加知りたいに参加もしそうなら、どうやってそのインデックスを作成する他の方法がありますか?

SELECT o.OrderID 
    , o.CustomerID 
    , c.CustomerName 
    , o.OrderDate 
    FROM Orders o 
    JOIN Customers c 
    ON o.CustomerID = c.CustomerID 
order 
    by o.CustomerID; 

とテーブルが

Ordersテーブルのようなものです:

+----------------------+------------+------------+ 
    | OrderID    | CustomerID | OrderDate | 
    +----------------------+------------+------------| 
    | 10308    | 2   |1996-09-18 | 
    | 10309    | 37   |1996-09-19 | 
    | 10310    | 77   |1996-09-20 | 
    +----------------------+------------+------------+ 

Customersテーブル:

CustomerID CustomerName      ContactName Country  
     1 Alfreds Futterkiste     Maria Anders Germany  
     2 Ana Trujillo Emparedados y helados Ana Trujillo Mexico  
     3 Antonio Moreno Taquería    Antonio Moreno Mexico 
+0

私は期待出力を – DzNiT0

+0

はい...私は知っているが、インデックスはどのような役割を果たしていますか? –

+0

説明文は、索引が使用されているかどうかを示します(ほとんどの場合、索引が使用されます) – Shadow

答えて

0

JOINingテーブルは、オプティマイザは、最初に起動したテーブルを決定します。あなたの特定の例では、WHEREはありませんが、ORDER BYがあります。したがって、オプティマイザはとなります。ORDERedという表から始めることにします。このかもしれない並べ替えを避ける。

それはソートを避けるための試みでOrdersで始まると仮定すると、あなたはOrdersでこれを必要とする:

INDEX(CustomerID) 

JOINにおける第二のテーブルには、それゆえ、Customersです。 Ordersを見てCustomersにアクセスするには、ON Orders.CustomerID = Customers.CustomerIDがあります。だから、あなたはCustomersでこれを必要とする:

INDEX(CustomerID) 

(注意:PRIMARY KEYがインデックスであるので、あなたはすでにPRIMARY KEY(CustomerID)を持っている場合INDEXを追加する必要はありませんあなたが各テーブルに私たちにSHOW CREATE TABLEを示した場合、それが役立つだろう。 。)

関連する問題