Teradata - ดัชนีหลักที่แบ่งพาร์ติชัน
Partitioned Primary Index (PPI) เป็นกลไกการสร้างดัชนีที่มีประโยชน์ในการปรับปรุงประสิทธิภาพของคำค้นหาบางคำ เมื่อแทรกแถวลงในตารางแถวนั้นจะถูกเก็บไว้ใน AMP และจัดเรียงตามลำดับแฮชของแถว เมื่อกำหนดตารางด้วย PPI แถวจะเรียงตามหมายเลขพาร์ติชัน ภายในแต่ละพาร์ติชันจะจัดเรียงตามแฮชแถว แถวถูกกำหนดให้กับพาร์ติชันตามนิพจน์พาร์ติชันที่กำหนด
ข้อดี
หลีกเลี่ยงการสแกนแบบเต็มตารางสำหรับข้อความค้นหาบางรายการ
หลีกเลี่ยงการใช้ดัชนีรองที่ต้องการโครงสร้างทางกายภาพเพิ่มเติมและการบำรุงรักษา I / O เพิ่มเติม
เข้าถึงชุดย่อยของตารางขนาดใหญ่ได้อย่างรวดเร็ว
วางข้อมูลเก่าอย่างรวดเร็วและเพิ่มข้อมูลใหม่
ตัวอย่าง
พิจารณาตารางคำสั่งซื้อต่อไปนี้พร้อมดัชนีหลักใน OrderNo
ไม่มีการจัดเก็บ | ลำดับที่ | วันสั่ง | OrderTotal |
---|---|---|---|
101 | 7501 | 2015-10-01 | 900 |
101 | 7502 | 2015-10-02 | 1,200 |
102 | 7503 | 2015-10-02 | 3,000 |
102 | 7504 | 2015-10-03 | 2,454 |
101 | 7505 | 2015-10-03 | 1201 |
103 | 7506 | 2015-10-04 | 2,454 |
101 | 7507 | 2015-10-05 | 1201 |
101 | 7508 | 2015-10-05 | 1201 |
สมมติว่ามีการกระจายระเบียนระหว่าง AMP ดังแสดงในตารางต่อไปนี้ บันทึกจะถูกเก็บไว้ใน AMP โดยเรียงตามแฮชแถว
RowHash | ลำดับที่ | วันสั่ง |
---|---|---|
1 | 7505 | 2015-10-03 |
2 | 7504 | 2015-10-03 |
3 | 7501 | 2015-10-01 |
4 | 7508 | 2015-10-05 |
RowHash | ลำดับที่ | วันสั่ง |
---|---|---|
1 | 7507 | 2015-10-05 |
2 | 7502 | 2015-10-02 |
3 | 7506 | 2015-10-04 |
4 | 7503 | 2015-10-02 |
หากคุณเรียกใช้การสืบค้นเพื่อแยกคำสั่งซื้อสำหรับวันใดวันหนึ่งเครื่องมือเพิ่มประสิทธิภาพอาจเลือกใช้การสแกนแบบเต็มตารางจากนั้นอาจเข้าถึงบันทึกทั้งหมดภายใน AMP ได้ เพื่อหลีกเลี่ยงปัญหานี้คุณสามารถกำหนดวันที่สั่งซื้อเป็นดัชนีหลักแบบแบ่งพาร์ติชัน เมื่อแทรกแถวในตารางคำสั่งซื้อจะถูกแบ่งตามวันที่สั่งซื้อ ภายในแต่ละพาร์ติชันจะเรียงลำดับตามแฮชแถว
ข้อมูลต่อไปนี้จะแสดงวิธีจัดเก็บระเบียนใน AMP หากมีการแบ่งพาร์ติชันตามวันที่สั่งซื้อ ถ้ามีการเรียกใช้แบบสอบถามเพื่อเข้าถึงระเบียนตามวันที่สั่งซื้อจะมีการเข้าถึงเฉพาะพาร์ติชันที่มีระเบียนสำหรับคำสั่งนั้น
พาร์ทิชัน | RowHash | ลำดับที่ | วันสั่ง |
---|---|---|---|
0 | 3 | 7501 | 2015-10-01 |
1 | 1 | 7505 | 2015-10-03 |
1 | 2 | 7504 | 2015-10-03 |
2 | 4 | 7508 | 2015-10-05 |
พาร์ทิชัน | RowHash | ลำดับที่ | วันสั่ง |
---|---|---|---|
0 | 2 | 7502 | 2015-10-02 |
0 | 4 | 7503 | 2015-10-02 |
1 | 3 | 7506 | 2015-10-04 |
2 | 1 | 7507 | 2015-10-05 |
ต่อไปนี้เป็นตัวอย่างการสร้างตารางที่มีดัชนีหลักของพาร์ติชัน PARTITION BY clause ใช้เพื่อกำหนดพาร์ติชัน
CREATE SET TABLE Orders (
StoreNo SMALLINT,
OrderNo INTEGER,
OrderDate DATE FORMAT 'YYYY-MM-DD',
OrderTotal INTEGER
)
PRIMARY INDEX(OrderNo)
PARTITION BY RANGE_N (
OrderDate BETWEEN DATE '2010-01-01' AND '2016-12-31' EACH INTERVAL '1' DAY
);
ในตัวอย่างข้างต้นตารางจะแบ่งตามคอลัมน์ OrderDate จะมีพาร์ทิชั่นแยกต่างหากสำหรับแต่ละวัน