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