ใช้ประเภทตารางเฉพาะ

เสร็จสมบูรณ์เมื่อ

SQL Server สนับสนุนชนิดตารางพิเศษที่ออกแบบมาสําหรับสถานการณ์เฉพาะและปริมาณงานนอกเหนือจากตารางบนดิสก์มาตรฐาน ตารางชนิดเหล่านี้ รวมถึงใน หน่วยความจําชั่วคราวภายนอกบัญชีแยกประเภท และ GRAPH ช่วยแก้ปัญหาด้านประสิทธิภาพ การปฏิบัติตามข้อกําหนด หรือความท้าทายทางสถาปัตยกรรมเฉพาะที่ตารางมาตรฐานไม่สามารถจัดการได้อย่างมีประสิทธิภาพ

การทําความเข้าใจว่าควรใช้ตารางชนิดพิเศษเหล่านี้เมื่อใดและอย่างไรเป็นสิ่งสําคัญสําหรับการออกแบบโซลูชันฐานข้อมูลที่มีประสิทธิภาพซึ่งตรงกับความต้องการของแอปพลิเคชันของคุณ

ใช้ตารางที่ปรับให้เหมาะสมในหน่วยความจํา

ตารางบนดิสก์แบบดั้งเดิมมีเวลาแฝงจาก I/O ของดิสก์ แม้ว่าจะมีการแคชก็ตาม สําหรับสถานการณ์ที่ต้องการความเร็วสูง เช่น ธุรกรรมหลายพันรายการต่อวินาทีที่มีเวลาตอบสนองระดับมิลลิวินาที ตารางในหน่วยความจําช่วยขจัดปัญหานี้โดยการเก็บข้อมูลทั้งหมดไว้ใน RAM ด้วยการทํางานพร้อมกันที่ปราศจากการล็อกและมองโลกในแง่ดี

ทําความเข้าใจว่าเมื่อใดควรใช้ตารางในหน่วยความจํา

ตารางที่ปรับให้เหมาะสมกับหน่วยความจําให้ ประโยชน์ด้านประสิทธิภาพที่สําคัญสําหรับปริมาณงานที่เฉพาะเจาะจง:

  • พื้นที่จัดเก็บสถานะเซสชัน - เว็บแอปพลิเคชันที่มีเซสชันพร้อมกันหลายล้านเซสชัน
  • การวิเคราะห์แบบเรียลไทม์ - ระบบการซื้อขายทางการเงินที่ต้องการเวลาแฝงระดับไมโครวินาที
  • OLTP ความถี่สูง - ระบบประมวลผลคําสั่งซื้อที่จัดการธุรกรรม 10,000+ รายการ/วินาที
  • เลเยอร์การแคช - ข้อมูลอ้างอิงที่เข้าถึงบ่อย (แค็ตตาล็อกผลิตภัณฑ์ การกําหนดค่า)
  • ตารางการจัดเตรียม - กระบวนการ ETL ที่มีการดําเนินการแทรก/อัปเดตแบบเข้มข้น

ตัวอย่างเช่น ไซต์อีคอมเมิร์ซใช้ตารางในหน่วยความจําสําหรับข้อมูลตะกร้าสินค้า โดยจัดการรถเข็นพร้อมกัน 50,000 รายการด้วยเวลาตอบสนองต่ํากว่ามิลลิวินาที ซึ่งช่วยลดเวลาแฝงในการชําระเงินลง 80%

พิจารณาการแลกเปลี่ยน

ตารางในหน่วยความจําจะจัดเก็บข้อมูลตารางจริงใน RAM เพื่อการเข้าถึงที่รวดเร็วขึ้นในขณะที่ตารางแบบดั้งเดิมจะเก็บข้อมูลบนดิสก์ อย่างไรก็ตาม ขนาดข้อมูลถูกจํากัดโดย RAM ที่พร้อมใช้งาน และตารางเหล่านี้ไม่สนับสนุนชนิดออบเจ็กต์ขนาดใหญ่ เช่น VARCHAR(MAX), NVARCHAR(MAX)หรือ VARBINARY(MAX).

แม้ว่าข้อมูลตารางจะอยู่ในหน่วยความจํา SQL Server ยังคงเขียนบันทึกธุรกรรมลงในดิสก์เพื่อให้มั่นใจถึงความทนทาน ซึ่งหมายความว่าคุณจะไม่สูญเสียธุรกรรมที่ผูกมัดหากเซิร์ฟเวอร์รีสตาร์ท ข้อมูลจะถูกกู้คืนจากบันทึกธุรกรรมกลับเข้าสู่หน่วยความจํา

คุณสามารถสร้างตารางที่ปรับให้เหมาะสมในหน่วยความจําได้โดยใช้ MEMORY_OPTIMIZED = ON ตัวเลือก ตัวอย่างมีดังนี้:

-- Create in-memory optimized table
CREATE TABLE dbo.OrderCache (
    OrderID INT PRIMARY KEY NONCLUSTERED,
    CustomerID INT,
    OrderDate DATETIME2,
    Amount DECIMAL(10,2),
    INDEX IX_CustomerID NONCLUSTERED (CustomerID)
) WITH (MEMORY_OPTIMIZED = ON, DURABILITY = SCHEMA_AND_DATA);

ใช้ตารางชั่วคราว

ตารางชั่วคราวจะ ติดตามประวัติการเปลี่ยนแปลงข้อมูลทั้งหมดโดยอัตโนมัติ เมื่อคุณปรับปรุงหรือลบแถว SQL Server จะเก็บรุ่นก่อนหน้าไว้ในตารางประวัติที่เชื่อมโยงโดยอัตโนมัติ โดยมีการประทับเวลาแสดงเวลาที่แสดงเมื่อรุ่นนั้นถูกต้อง สิ่งนี้เกิดขึ้นอย่างโปร่งใส คุณปรับเปลี่ยนข้อมูลโดยใช้ INSERTคําสั่ง , UPDATEและ DELETE ปกติ และกลไกจัดการฐานข้อมูลจะจัดการการกําหนดรุ่น

ประโยชน์หลักคือการสืบค้นข้อมูลตามที่มีอยู่ ณ เวลาใดก็ได้ คุณสามารถถามว่า "เงินเดือนของพนักงานคนนี้ในวันที่ 1 มกราคม 2025 เป็นเท่าไร" หรือ "แสดงผลิตภัณฑ์ทั้งหมดที่อยู่ในสต็อกในไตรมาสที่แล้ว" โดยไม่ต้องรักษาตารางการตรวจสอบที่ซับซ้อนหรือเขียนตรรกะการกําหนดเวอร์ชันแบบกําหนดเอง

ตารางชั่วคราวตอบสนองความต้องการด้านการปฏิบัติตามข้อกําหนด การแก้ไขปัญหา และการวิเคราะห์:

  • การปฏิบัติตามกฎระเบียบและการตรวจสอบ - บันทึกทางการเงินที่ต้องมีประวัติการเปลี่ยนแปลงที่สมบูรณ์
  • การแก้ไขปัญหา - การตรวจสอบยอดคงเหลือในบัญชี ณ เวลาที่เกิดธุรกรรมที่มีการโต้แย้ง
  • การวิเคราะห์แนวโน้ม - การวิเคราะห์ว่าราคาสินค้าเปลี่ยนแปลงไปอย่างไรในไตรมาสต่างๆ
  • การกู้คืนข้อมูล - การย้อนกลับการอัปเดตโดยไม่ได้ตั้งใจโดยไม่ต้องกู้คืนข้อมูลสํารอง
  • ขนาด - ที่เปลี่ยนไปอย่างช้าๆมิติคลังข้อมูลประเภท 2 อัตโนมัติ

สถานการณ์ทางธุรกิจทั่วไป ได้แก่ แอปพลิเคชันที่ติดตามการเปลี่ยนแปลงเงินเดือนและการเลื่อนตําแหน่งการจัดการสินค้าคงคลังที่วิเคราะห์แนวโน้มสต็อกการดูแลสุขภาพรักษาประวัติการบันทึกผู้ป่วยเพื่อการปฏิบัติตามข้อกําหนดและการติดตามการเปลี่ยนแปลงความคุ้มครองของกรมธรรม์ประกันภัยสําหรับการระงับข้อพิพาท

พิจารณาประโยชน์ของตารางชั่วคราว

ตารางชั่วคราวไม่จําเป็นต้องมีการเปลี่ยนแปลงโค้ดแอปพลิเคชันและให้การติดตามประวัติที่โปร่งใส คิวรี point-in-time ใช้ไวยากรณ์อย่างง่าย และการล้างข้อมูลอัตโนมัติจะจัดการข้อมูลประวัติเก่า อย่างไรก็ตาม ตารางชั่วคราวมีความต้องการในการจัดเก็บเป็นสองเท่าโดยประมาณ

ตารางชั่วคราว จะเก็บรักษาประวัติการเปลี่ยนแปลงข้อมูลที่สมบูรณ์โดยอัตโนมัติสําหรับการตรวจสอบและการวิเคราะห์ ณ จุดเวลา

คุณสามารถสร้างตารางชั่วคราวได้โดยใช้ SYSTEM_VERSIONING = ON ตัวเลือก ตารางชั่วคราวต้องการคอลัมน์พิเศษ DATETIME2 สองคอลัมน์เพื่อติดตามระยะเวลาที่ใช้ได้ของแต่ละรุ่นแถว และ PERIOD FOR SYSTEM_TIME ส่วนคําสั่งเพื่อกําหนดคอลัมน์ที่ติดตามการประทับเวลาเหล่านี้ ตัวอย่างมีดังนี้:

-- Create temporal table with automatic history tracking
CREATE TABLE Employee (
    EmployeeID INT PRIMARY KEY,
    EmployeeName NVARCHAR(100),
    Department NVARCHAR(50),
    SysStartTime DATETIME2 GENERATED ALWAYS AS ROW START,
    SysEndTime DATETIME2 GENERATED ALWAYS AS ROW END,
    PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime)
) WITH (SYSTEM_VERSIONING = ON);

-- Query historical data
SELECT * FROM Employee
FOR SYSTEM_TIME AS OF '2026-01-01' 
WHERE EmployeeID = 1;

เมื่อคุณสร้างตารางชั่วคราว SQL Server จะสร้างตารางประวัติโดยอัตโนมัติเพื่อเก็บรุ่นของแถวก่อนหน้า และจัดการทั้งสองตารางอย่างโปร่งใส

ใช้ตารางภายนอก

สถาปัตยกรรมข้อมูลสมัยใหม่มักมีข้อมูลที่กระจัดกระจายไปทั่ว Data Lake ที่เก็บข้อมูล Blob และหลายระบบ ตามเนื้อผ้า คุณจะต้อง ETL (แยก แปลง โหลด) ข้อมูลทั้งหมดลงในฐานข้อมูลของคุณก่อนที่จะสืบค้น ตารางภายนอกช่วยให้ การจําลองเสมือนของข้อมูล สามารถสืบค้นข้อมูลในที่ที่ทํางานได้โดยไม่ต้องย้าย ช่วยประหยัดค่าใช้จ่ายในการจัดเก็บและความซับซ้อนของ ETL

ทําความเข้าใจว่าเมื่อใดควรใช้ตารางภายนอก

ตารางภายนอกเก่งในการสืบค้นข้อมูลในระบบจัดเก็บข้อมูลแบบกระจาย:

  • การรวม Data Lake - คิวรีไฟล์ Parquet/CSV ใน Azure Data Lake Storage โดยไม่ต้องนําเข้า
  • การสํารวจข้อมูล - วิเคราะห์ข้อมูลดิบก่อนตัดสินใจว่าจะนําเข้าอะไร
  • การเพิ่มประสิทธิภาพต้นทุน - หลีกเลี่ยงการทําซ้ําข้อมูลที่จัดเก็บไว้ที่อื่นแล้ว
  • แบบสอบถามแบบรวมศูนย์ - รวมตารางฐานข้อมูลกับไฟล์ในระบบภายนอก
  • ที่เก็บข้อมูลเก็บถาวร - เข้าถึงข้อมูลในอดีตที่จัดเก็บไว้ในที่เก็บข้อมูล blob ที่ถูกกว่า

สถานการณ์ทั่วไป ได้แก่ การสืบค้นไฟล์บันทึกหลายปีใน Data Lake ควบคู่ไปกับข้อมูลธุรกรรม การรวมบันทึกฐานข้อมูลสดกับข้อมูลที่เก็บข้อมูล Blob ที่เก็บถาวร การเข้าถึงข้อมูลเดิมโดยไม่ต้องย้ายข้อมูลทั้งหมด และการสืบค้นไฟล์ JSON เซ็นเซอร์ IoT หลายล้านไฟล์โดยไม่ต้องนําเข้า

พิจารณาข้อจํากัดด้านประสิทธิภาพ

ตารางภายนอกให้การสืบค้นแบบรวมในแหล่งข้อมูลต่างๆ แต่มีข้อจํากัด:

  • ไม่มีการเคลื่อนย้ายข้อมูลหรือการจัดเก็บข้อมูลซ้ําซ้อน
  • มักจะช้ากว่าตารางดั้งเดิมเนื่องจากเวลาแฝงของเครือข่ายและการแยกวิเคราะห์ไฟล์
  • อ่านอย่างเดียว (ไม่สามารถอัปเดต/ลบได้ในสถานการณ์ส่วนใหญ่)
  • การจัดทําดัชนีและการเพิ่มประสิทธิภาพที่จํากัด

คุณสามารถสร้างตารางภายนอกได้โดยใช้ CREATE EXTERNAL TABLE คําสั่งที่มีแหล่งข้อมูลและรูปแบบไฟล์ ตัวอย่างมีดังนี้:

-- Create external table pointing to data lake
CREATE EXTERNAL TABLE dbo.ExternalSalesData (
    OrderID INT,
    CustomerID INT,
    OrderAmount DECIMAL(10,2),
    OrderDate DATE
) WITH (
    LOCATION = '/raw/sales/',
    DATA_SOURCE = DataLakeSource,
    FILE_FORMAT = ParquetFormat
);

ใช้ตารางบัญชีแยกประเภท

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

ทําความเข้าใจว่าเมื่อใดควรใช้ตารางบัญชีแยกประเภท

ตารางบัญชีแยกประเภทตอบสนองความต้องการด้านการปฏิบัติตามกฎระเบียบและการตรวจสอบทางนิติวิทยาศาสตร์:

  • ธุรกรรมทางการเงิน - การธนาคาร การประมวลผลการชําระเงิน การแลกเปลี่ยนสกุลเงินดิจิทัล
  • ห่วงโซ่อุปทาน - การติดตามแหล่งที่มาของผลิตภัณฑ์ การดูแล และความถูกต้องของผลิตภัณฑ์
  • บันทึกทางกฎหมาย - สัญญา ข้อตกลง การยื่นเอกสารทางกฎหมายที่ต้องการความไม่เปลี่ยนแปลง
  • การดูแลสุขภาพ - บันทึกใบสั่งยา แบบฟอร์มยินยอมผู้ป่วย
  • รัฐบาล - บันทึกการลงคะแนนเสียง, ทะเบียนที่ดิน, การออกใบอนุญาต

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

เลือกระหว่างบัญชีแยกประเภทที่อัปเดตได้และแบบผนวกเท่านั้น

ตารางบัญชีแยกประเภทมีสองประเภท ตารางบัญชีแยกประเภทที่อัปเดตได้ อนุญาต INSERT, UPDATEและ DELETE การดําเนินการในขณะที่ติดตามการเปลี่ยนแปลงทั้งหมดด้วยการเข้ารหัส ระบบจะจัดเก็บเวอร์ชันก่อนหน้าโดยอัตโนมัติในตารางประวัติ คล้ายกับตารางชั่วคราว แต่มีประโยชน์เพิ่มเติมในการตรวจสอบป้องกันการงัดแงะ ตารางบัญชีแยกประเภทแบบผนวกอย่างเดียว อนุญาตให้ INSERT ดําเนินการเท่านั้น โดยสร้างเรกคอร์ดที่เปลี่ยนแปลงไม่ได้อย่างแท้จริงสําหรับสถานการณ์ที่ต้องการความสมบูรณ์ของข้อมูลอย่างแท้จริง

คุณสามารถรวมเทคโนโลยีทั้งสองเข้าด้วยกันได้โดยการสร้างตารางที่เป็นทั้งตารางบัญชีแยกประเภทที่อัปเดตได้และตารางชั่วคราว โดยได้รับการตรวจสอบการเข้ารหัสควบคู่ไปกับความสามารถในการสืบค้นแบบ point-in-time

ตัวอย่างเช่น บริษัทยาใช้ตารางบัญชีแยกประเภทแบบผนวกเท่านั้นสําหรับข้อมูลการทดลองทางคลินิก โดยให้หลักฐานการเข้ารหัสแก่ผู้ตรวจสอบอิสระว่าผลการทดสอบไม่มีการเปลี่ยนแปลงหลังจากส่ง

คุณสามารถสร้างตารางบัญชีแยกประเภทได้โดยใช้ LEDGER = ON ตัวเลือก ตัวอย่างมีดังนี้:

-- Create ledger table
CREATE TABLE dbo.FinancialTransaction (
    TransactionID INT PRIMARY KEY IDENTITY,
    AccountNumber NVARCHAR(20),
    Amount DECIMAL(15,2),
    TransactionType NVARCHAR(20)
) WITH (LEDGER = ON);

-- Append-only ledger provides immutability
CREATE TABLE dbo.AuditLog (
    LogID INT PRIMARY KEY IDENTITY,
    EventDescription NVARCHAR(500),
    EventTimestamp DATETIME2
) WITH (LEDGER = ON, APPEND_ONLY = ON);

เมื่อคุณสร้างตารางบัญชีแยกประเภท SQL Server จะเพิ่มคอลัมน์ที่ซ่อนอยู่โดยอัตโนมัติ และสร้างวัตถุฐานข้อมูลที่สนับสนุนเพื่อติดตามห่วงโซ่การเข้ารหัสลับ การแก้ไขทุกแถวจะสร้างแฮชการเข้ารหัสที่เชื่อมโยงกับการดําเนินการก่อนหน้า คุณสามารถตรวจสอบความสมบูรณ์ของข้อมูลได้โดยใช้มุมมองระบบที่มีอยู่แล้วภายใน เช่น sys.database_ledger_transactions และขั้นตอน เช่น sp_verify_database_ledger เพื่อตรวจสอบความถูกต้องของห่วงโซ่การเข้ารหัสลับที่ยังคงไม่ขาด

ใช้ตารางกราฟ

ฐานข้อมูลเชิงสัมพันธ์มีความเชี่ยวชาญในด้านข้อมูลที่มีโครงสร้าง แต่มีปัญหากับข้อมูลที่เชื่อมต่อกันสูงซึ่งต้องมีการรวมจํานวนมาก การค้นหา "เพื่อนของเพื่อน" หรือ "ผลิตภัณฑ์ที่เกี่ยวข้องผ่านหมวดหมู่ 3 องศา" จะซับซ้อนด้วยตารางแบบดั้งเดิม ความสามารถของ SQL Graph สร้างแบบจําลองโหนด (เอนทิตี) และขอบ (ความสัมพันธ์) โดยกําเนิด ทําให้การสืบค้นความสัมพันธ์ที่ซับซ้อนเป็นเรื่องง่ายและมีประสิทธิภาพ

ตารางกราฟช่วยลดความยุ่งยากในการสร้างแบบจําลองความสัมพันธ์ แต่ต้องเรียนรู้ไวยากรณ์ใหม่ พวกเขาให้การสร้างแบบจําลองข้อมูลที่เชื่อมต่อที่ใช้งานง่าย คิวรีที่ง่ายขึ้นสําหรับการสํารวจความสัมพันธ์ และประสิทธิภาพที่ดีขึ้นสําหรับการสืบค้นแบบหลายฮอป สคีมาที่ยืดหยุ่นรองรับความสัมพันธ์ที่พัฒนาขึ้น อย่างไรก็ตาม ตารางกราฟมีเส้นโค้งการเรียนรู้สําหรับ MATCH ไวยากรณ์ และทํางานได้ดีที่สุดสําหรับคิวรีความสัมพันธ์ที่อ่านหนัก

ฐานข้อมูลสามารถมีโหนดและตาราง Edge หลายตารางที่ทํางานร่วมกันเพื่อสร้างแบบจําลองข้อมูลกราฟของคุณ คุณกําหนดตารางที่แสดงถึงโหนดและตารางใดแสดงถึงขอบตามความสัมพันธ์ของข้อมูลของคุณ

Note

ตารางกราฟไม่เหมาะสมสําหรับทุกสถานการณ์ หลีกเลี่ยงความสัมพันธ์หลักและลูกอย่างง่ายที่คีย์ต่างประเทศทํางานได้ดี โดยส่วนใหญ่เป็นข้อมูลธุรกรรมที่ไม่มีความสัมพันธ์ที่ซับซ้อน หรือสคีมาที่มีโครงสร้างสูงและเสถียร

ทําความเข้าใจโครงสร้างตารางกราฟ

SQL Graph ใช้ตารางสองชนิดเพื่อสร้างแบบจําลองความสัมพันธ์ ตารางโหนด จัดเก็บเอนทิตีและรวมคอลัมน์ที่ซ่อน $node_id อยู่โดยอัตโนมัติซึ่งระบุแต่ละโหนดโดยไม่ซ้ํากัน ตาราง Edge จัดเก็บความสัมพันธ์ระหว่างโหนดและรวมคอลัมน์ที่ซ่อนอยู่ $edge_id$from_idและ$to_idเพื่อรักษาการเชื่อมต่อ คอลัมน์พิเศษเหล่านี้ช่วยให้ไว MATCH ยากรณ์สามารถสํารวจความสัมพันธ์ได้อย่างมีประสิทธิภาพ

คุณสามารถสร้างตารางกราฟได้โดยใช้ไวAS NODEยากรณ์ และAS EDGE ตัวอย่างมีดังนี้:

-- Create graph tables
CREATE TABLE Person AS NODE;
CREATE TABLE Manages AS EDGE;
CREATE TABLE Knows AS EDGE;

-- Insert nodes
INSERT INTO Person VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Charlie');

-- Insert edges (relationships)
INSERT INTO Manages VALUES (1, 2), (2, 3);

-- Query relationships
SELECT Person1.name, Person2.name 
FROM Person AS Person1, Manages, Person AS Person2
WHERE MATCH (Person1-(Manages)->Person2)
AND Person1.id = 1;

เมื่อคุณสร้างโหนดและตาราง Edge SQL Server จะจัดการคอลัมน์ระบบที่ซ่อนอยู่โดยอัตโนมัติซึ่งเปิดใช้งานคิวรีการสํารวจกราฟที่มีประสิทธิภาพ

ตารางเฉพาะแต่ละประเภทมาพร้อมกับการแลกเปลี่ยน: ตารางในหน่วยความจําต้องการ RAM, ตารางชั่วคราวที่เก็บข้อมูลสองเท่า, ตารางภายนอกเพิ่มเวลาแฝงของเครือข่าย, ตารางบัญชีแยกประเภทป้องกันการลบ และตารางกราฟต้องใช้ไวยากรณ์ใหม่ เราขอแนะนําให้เลือกประเภทตารางที่เหมาะสมในระหว่างการออกแบบ เนื่องจากการตัดสินใจเหล่านี้เปลี่ยนแปลงได้ยากหลังจากการปรับใช้