Indexes

การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

Dean Smith

Founder, Atamai Analytics

Index คืออะไร?

  • โครงสร้างที่ช่วยเพิ่มความเร็วในการเข้าถึงข้อมูลในตาราง
  • ใช้ค้นหาข้อมูลได้อย่างรวดเร็วโดยไม่ต้องสแกนทั้งตาราง
  • ช่วยเพิ่มประสิทธิภาพคิวรีที่มีเงื่อนไขการกรอง
  • ใช้กับคอลัมน์ในตาราง
  • โดยทั่วไปผู้ดูแลฐานข้อมูลเป็นผู้เพิ่ม Index
การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

Clustered และ Nonclustered Index

Clustered Index

  • อุปมา: พจนานุกรม
  • หน้าข้อมูลในตารางเรียงลำดับตามคอลัมน์ที่มี Index
  • มีได้เพียงหนึ่งรายการต่อตาราง
  • เพิ่มความเร็วในการค้นหา
การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

Clustered และ Nonclustered Index

Clustered Index

  • อุปมา: พจนานุกรม
  • หน้าข้อมูลในตารางเรียงลำดับตามคอลัมน์ที่มี Index
  • มีได้เพียงหนึ่งรายการต่อตาราง
  • เพิ่มความเร็วในการค้นหา

Non-clustered Index

  • อุปมา: ดัชนีท้ายเล่มในหนังสือเรียน
  • โครงสร้างประกอบด้วยชั้น Index ที่เรียงลำดับซึ่งชี้ไปยังหน้าข้อมูลในตารางที่ไม่ได้เรียงลำดับ
  • ตารางหนึ่งมีได้มากกว่าหนึ่งรายการ
  • ช่วยเพิ่มประสิทธิภาพการแทรกและอัปเดตข้อมูล
การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

Clustered Index: โครงสร้าง B-tree

 

  • ROOT NODE

 

  • BRANCH NODES

 

  • PAGE NODES
การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

Clustered Index: โครงสร้าง B-tree

ROOT NODE:                          
                                    A G O W
BRANCH NODES:
                A B E F             G H J K             O P S T
PAGE NODES:
          Page 1             Page 2             Page 3              Page 4
       Index Column |...  Index Column |...  Index Column | ...  Index Column | ...
       A | ...            E | ...            I | ...             M | ...
       B | ...            F | ...            J | ...             N | ...
       C | ...            G | ...            K | ...             O | ...
       D | ...            H | ...            L | ...             P | ...
       ...                ...                ...                 ...
การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

ตาราง Customers ที่ไม่มี Clustered Index

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
PAGE NODES:
            Page 1
         CustomerID |...
         ALFKI | ... 
         ANATR | ...
         BLONP | ... 
         BSBEV | ...
         ...                 
การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

ตาราง Customers ที่ไม่มี Clustered Index

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
PAGE NODES:
            Page 1              Page 2
         CustomerID |...     CustomerID|...
         ALFKI | ...         FOLIG | ...
         ANATR | ...         FRANK | ...
         BLONP | ...         GALED | ...
         BSBEV | ...         GREAL | ...
         ...                 ...
การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

ตาราง Customers ที่ไม่มี Clustered Index

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
PAGE NODES:
            Page 1              Page 2              Page 3
         CustomerID |...     CustomerID|...      CustomerID | ... 
         ALFKI | ...         FOLIG | ...         LILAS | ...  
         ANATR | ...         FRANK | ...         LINOD | ...  
         BLONP | ...         GALED | ...         MEREP | ...  
         BSBEV | ...         GREAL | ...         MORGK | ...   
         ...                 ...                 ...          
การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

ตาราง Customers ที่ไม่มี Clustered Index

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
PAGE NODES:
            Page 1              Page 2              Page 3               Page 4
         CustomerID |...     CustomerID|...      CustomerID | ...     CustomerID | ...
         ALFKI | ...         FOLIG | ...         LILAS | ...          OCEAN | ...
         ANATR | ...         FRANK | ...         LINOD | ...          PARIS | ...
         BLONP | ...         GALED | ...         MEREP | ...           
         BSBEV | ...         GREAL | ...         MORGK | ...          
         ...                 ...                 ...                  ...
การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

ตาราง Customers ที่มี Clustered Index

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
ROOT NODE:                          
                                         ALFKI FOLIG OLDWO WOLZA
BRANCH NODES:
              ALFKI BONAP DRACD FISSA    FOLIG GALED LILAS NORTS    OCEAN OLDWO QUICK WOLZA
PAGE NODES:
                    Page 1              Page 2              Page 3               Page 4
                 CustomerID |...     CustomerID|...      CustomerID | ...     CustomerID | ...
                 ALFKI | ...         FOLIG | ...         LILAS | ...          OCEAN | ...
                 ANATR | ...         FRANK | ...         LINOD | ...          PARIS | ...
                 BLONP | ...         GALED | ...         MEREP | ...          PICCO | ...
                 BSBEV | ...         GREAL | ...         MORGK | ...          QUICK | ...
                 ...                 ...                 ...                  ...
การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

ตาราง Customers ที่มี Clustered Index

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
ROOT NODE:                          
                                                     OLDWO WOLZA
BRANCH NODES:
              ALFKI BONAP DRACD FISSA    FOLIG GALED LILAS NORTS    OCEAN OLDWO QUICK WOLZA
PAGE NODES:
                    Page 1              Page 2              Page 3               Page 4
                 CustomerID |...     CustomerID|...      CustomerID | ...     CustomerID | ...
                 ALFKI | ...         FOLIG | ...         LILAS | ...          OCEAN | ...
                 ANATR | ...         FRANK | ...         LINOD | ...          PARIS | ...
                 BLONP | ...         GALED | ...         MEREP | ...          PICCO | ...
                 BSBEV | ...         GREAL | ...         MORGK | ...          QUICK | ...
                 ...                 ...                 ...                  ...
การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

ตาราง Customers ที่มี Clustered Index

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
ROOT NODE:                          
                                                     OLDWO WOLZA
BRANCH NODES:
                                                                          OLDWO QUICK 
PAGE NODES:
                    Page 1              Page 2              Page 3               Page 4
                 CustomerID |...     CustomerID|...      CustomerID | ...     CustomerID | ...
                 ALFKI | ...         FOLIG | ...         LILAS | ...          OCEAN | ...
                 ANATR | ...         FRANK | ...         LINOD | ...          PARIS | ...
                 BLONP | ...         GALED | ...         MEREP | ...          PICCO | ...
                 BSBEV | ...         GREAL | ...         MORGK | ...          QUICK | ...
                 ...                 ...                 ...                  ...
การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

ตาราง Customers ที่มี Clustered Index

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
ROOT NODE:                          
                                                     OLDWO WOLZA
BRANCH NODES:
                                                                          OLDWO QUICK 
PAGE NODES:
                                                                                 Page 4
                                                                              CustomerID | ...
                                                                              OCEAN | ...
                                                                              PARIS | ...
                                                                              PICCO | ...
                                                                              QUICK | ...
                                                                              ...
การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

ตาราง Customers ที่มี Clustered Index

SELECT *
FROM Customers
WHERE CustomerID = "PARIS"
ROOT NODE:                          
                                                     OLDWO WOLZA
BRANCH NODES:
                                                                          OLDWO QUICK 
PAGE NODES:
                                                                                 Page 4
                                                                              CustomerID | ...



                                                                             PARIS | ...


การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

Clustered Index: ตัวอย่าง

SET STATISTICS IO ON
SELECT * 
FROM PlayerStats 
WHERE Team = 'OKC'

ตาราง PlayerStats ที่ไม่มี Index

Table 'PlayerStats'. ..., logical reads 12, ...

 

ตาราง PlayerStats ที่มี Clustered Index บนคอลัมน์ Team

Table 'PlayerStats'. ..., logical reads 2, ...
การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

มาฝึกกันเถอะ!

การปรับปรุงประสิทธิภาพคิวรีใน SQL Server

Preparing Video For Download...