Tải bản đầy đủ (.pdf) (50 trang)

Cải tiến trong lệnh T-SQL của SQL Server 2008 pot

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.59 MB, 50 trang )

Cải tiến trong lệnh T-SQL của SQL Server 2008

Cải tiến trong lệnh T-SQL của SQL Server 2008 SQL
Server 2008 được tích hợp nhiều tính năng mới đáng
chú ý. Một trong số những tính năng này là những cải
tiến trong câu lệnh T-SQL giúp giảm thời gian làm
việc với những câu lệnh này.

Simpo PDF Merge and Split Unregistered Version -
Trong phần đầu tiên của loạt bài viết này chúng ta sẽ
tìm hiểu một số cải tiến của T-SQL.

Cải tiến trong Intellisense (trình cảm ứng thông
minh)

Với những cải của Intellisense giờ đây người dùng có
thể lưu dữ liệu, tìm những thông tin cần thiết, chèn
trực tiếp các thành phần ngôn ngữ T-SQL vào mã và
trình cảm ứng thông minh này có thể giúp rút ngắn
thời gian nhập lệnh từ bàn phím. Chức năng này có
thể rút ngắn thời gian phát triển phần mềm nhờ làm
giảm thời gian thao tác với bàn phím đồng thời giảm
thiểu những tham chiếu tới những tài liệu ngoài.
Những cải tiến của Intellisense bao gồm vùng ngôn
ngữ T-SQL được mở rộng và tích hợp một hệ thống
mầu sắc.

Tính năng này hoạt động giống như tính năng kiểm
Simpo PDF Merge and Split Unregistered Version -
tra cú pháp tự động trong Visual Studio. Khi nhập
lệnh T-SQL nó sẽ tự động hoàn thiện cú pháp cho


lệnh, và cho các đối tượng trong cơ sở dữ liệu, dù các
biến đã được khai báo trước đó. Người dùng có thể
có thể lựa chọn sử dụng tính năng này hoặc tắt bỏ nó
nếu thấy không cần thiết.

Simpo PDF Merge and Split Unregistered Version -

Cải tiến trong cú pháp lệnh T-SQL

Trong SQL Server 2008, cú pháp của lệnh T-SQL có
ba cải tiến chính sau đây:

1. Khởi tạo biến cùng thời điểm khai báo. Giờ đây
người dùng có thể khởi tạo biến ngay khi khai báo
thay vì sử dụng hai lệnh riêng biệt là DECLARE và
SET như trước đây. Nó có thể làm việc với hầu hết
các kiểu dữ liệu bao gồm kiểu dữ liệu SQLCLR,
nhưng sẽ không làm việc với kiểu dữ liệu TEXT,
NTEXT hay IMAGE.

2. Compound Operators. Compound Operators (toán
tử kết hợp) là dạng toán tử giống như trong C++ và
C#. Chúng thực thi một số thao tác và cài đặt một giá
trị gốc cho kết quả của thao tác. Chúng giúp tránh
một số lỗi và cho phép viết tắt khi làm việc với code.
Simpo PDF Merge and Split Unregistered Version -
Ngoài ra toán tử này có thể sử dụng trong mệnh đề
SET của lệnh UPDATE. Dưới đây là danh sách các
toán tử được hỗ trợ trong SQL Server 2008:
 += Add and assign


 -= Subtract and assign

 *= Multiply and assign

 /= Divide and assign

 %= Modulo and assign

 &= Bitwise AND and assign

 ^= Bitwise XOR and assign

Simpo PDF Merge and Split Unregistered Version -
 |= Bitwise OR and assign
Ví dụ:


3. Row Constructor. T-SQL được cải tiến cho phép
chèn nhiều giá trị bằng một lệnh INSERT duy nhất.
Điều đó có nghĩa là người dùng có thể đưa nhiều
thuộc tính hàng vào trong mệnh đề VALUE.

Ví dụ:
Simpo PDF Merge and Split Unregistered Version -


Những cải tiến trong thành phần phụ thuộc của
đối tượng
Những cải tiến trong những thành phần phụ thuộc

của đối tượng giúp cung cấp những thông tin đáng tin
cậy của nhiều thành phần phụ thuộc giữa các đối
Simpo PDF Merge and Split Unregistered Version -
tượng thông qua view catalog mới được giới thiệu và
các chức năng quản lý động. Những thông tin của
thành phần phụ thuộc luôn được cập nhật cho phạm
vi lược đồ đối tượng(nơi đối tượng A không thể bị
xóa do đối tượng B phụ thuộc vào nó) và ngoài lược
đồ đối tượng (nơi đối tượng A có thể bị xóa hoặc
thậm chí không thể được tạo tuy nhiên đối tượng B
vẫn phụ thuộc vào nó). Những thành phần phụ thuộc
được kiểm tra cho các thủ tục lưu, bảng biểu, view,
chức năng, trigger, kiểu người dùng định nghĩa, tập
hợp lược đồ XML, … SQL Server 2008 giới thiệu ba
đối tượng mới cung cấp những thông tin thành phần
phụ thuộc của đối tượng, bao gồm:

1. sys.sql_expression_dependenciescatalog view:
Hiển thị tên các thành phần phụ thuộc của đối tượng.
Nó bao gồm một bản ghi cho mỗi thành phần phụ
Simpo PDF Merge and Split Unregistered Version -
thuộc trên đối tượng do người dùng định nghĩa trong
cơ sở dữ liệu hiện thời.

2. sys.dm_sql_referenced_entitiesDMF: Cung cấp
nọi thực thể mà thực thể nhập phụ thuộc vào, trả về
một hàng cho mỗi đối tượng được người dùng định
nghĩa quy chiếu theo tên trong định nghĩa của thực
thể tham chiếu được chỉ định.


3. sys.dm_sql_referencing_entitiesDMF: Cung cấp
mọi đối tượng phụ thuộc vào thực thể nhập, nó sẽ trả
về một bản ghi cho mội đối tượng được người dùng
định nghĩa trong cơ sở dữ liệu hiện tại được tham
chiếu theo tên của một đối tượng khác được cũng
được người dùng định nghĩa.

Có hai phương pháp người dùng có thể sử dụng để
xem những đối tượng phụ thuộc đó là sử dụng SSMS
Simpo PDF Merge and Split Unregistered Version -
(phải chuột lên đối tượng rồi chọn View
Dependencies) hay bằng cách viết những truy vấn
theo view và DMF vừa kể ra ở trên.



Simpo PDF Merge and Split Unregistered Version -


Sử dụng bảng gợi ý FORCESEEK
Simpo PDF Merge and Split Unregistered Version -
Bảng gợi ý FORCESEEK khá hữu dụng trong trường
hợp Query Plan (các bước được sử dụng để truy cập
hay hiệu chỉnh thông tin trong hệ thống quản lý cơ sở
dữ liệu liên quan tới SQL) sử dụng một bảng hay
toán tử Index Scan (quét chỉ mục) trên một bảng hay
view, tuy nhiên toán tử (Index Seek) tìm kiếm chỉ
mục có thể hiệu quả hơn (ví dụ như trong trường hợp
có quá nhiều sự lựa chọn). Gợi ý bảng FORCESEEK
buộc Query Optimizer (trình tối ưu truy vấn) chỉ sử

dụng các thao tác Index Seek như đường dẫn truy cập
vào dữ liệu trong bảng hay view được tham chiếu
trong truy vấn. Chúng ta có thể sử dụng bảng gợi ý
này để ghi đè lên Query Plan mặc định được Query
Optimizer lựa chọn để tránh các vấn đề thực thi gây
ra do Query Plan không hiệu quả. Ví dụ, nếu một
Plan chứa bảng hay các toán tử Index Scan, và những
bảng tương ứng liên tục được truy cập trong khi thực
thi truy vấn thì việc áp dụng một thao tác Index Seek
có thể sẽ hiệu quả hơn sử dụng truy vấn. Khả năng
Simpo PDF Merge and Split Unregistered Version -
này sẽ xảy ra trong trường hợp các thành phần trong
tập hợp không chính xác hay tính đến lượng thời gian
cần sử dụng để viết một Query Plan mà Query
Optimizer sử dụng để thực hiện tìm kiếm.


Simpo PDF Merge and Split Unregistered Version -

Một trong những tình huống mà bảng gợi ý này trở
nên hữu dụng đó là khả năng làm việc với Parameter
Sniffing (một công cụ mà trình tối ưu truy vần của
SQL Server sử dụng để tìm kiếm giá trị biến từ truy
vấn trong khi thực hiện lệnh lần đầu tiên và tạo một
Plan thực thi tối ưu dựa trên giá trị đó). Chúng ta hãy
kiểm chứng điều này bằng cách chạy những truy vấn
dưới đây trong cơ sở dữ liệu AdventureWorks và
phân tích những điểm khác biệt.
Trường hợp 1: Truy vấn đầu tiên trả về 450 hàng và
có ít khả năng chọn lọc hơn so với truy vấn thứ hai

chỉ trả về 16 bản ghi. Do đó cần sử dụng Index Scan
cho truy vấn đầu tiên hơn là sử dụng Index Seek và
Lookup (tra cứu) của truy vấn thứ hai.

Simpo PDF Merge and Split Unregistered Version -


Trường hợp 2: Chúng ta sẽ chạy lại các truy vần ở
trên, nhưng trong trường hợp này chúng ta sẽ sử dụng
các biến để gán các giá trị cho truy vấn thay vì nhập
trực tiếp các giá trị. Nếu kiểm tra các Plan thực thi
được tạo chúng ta sẽ thấy cả hai truy vấn đang sử
dụng cùng Index Scan mặc dù các giá trị của tham số
hoàn toàn khác nhau. Theo trường hợp 1 thì truy vấn
thứ hai có khả năng chọn lọc cao hơn và cần sử dụng
Index Seek và Lookup. Đó là do trong khi khi truy
Simpo PDF Merge and Split Unregistered Version -
vấn đầu tiên chạy, trình tối ưu truy vấn SQL không
nhận biết được giá trị biến cho đến khi chạy thực. Vì
đã sử dụng biến và nhập tùy chọn lọc trên bộ lọc và
tạo Plan thực thi trên cơ sở của bộ lọc này và lưu trữ
lại, trong khi đó truy vấn thứ hai cũng sẽ sử dụng
Plan thực thi tương tự được lưu trữ.



Trường hợp 3: Nếu những truy vấn sử dụng tham số
và mọi thời điểm những giá trị biến này trả về với
Simpo PDF Merge and Split Unregistered Version -
khả năng lọc cao thì chúng ta phải áp dụng phương

pháp nào để buộc Query Optimizer thực hiện Index
Seek thay vì Index Scan? Chúng tra có hai lựa chọn ở
đây, hoặc là sử dụng gợi ý FORCESEEK hay sử
dụng tùy chọn RECOMPILE.

Simpo PDF Merge and Split Unregistered Version -


Simpo PDF Merge and Split Unregistered Version -
FORCESEEK áp dụng cho các thao tác tìm kiểm chỉ
mục theo nhóm và không theo nhóm. Nó có thể được
chỉ định cho mọi bảng hay view trong mệnh đề
FROM của lệnh STATEMENT và trong mệnh đề
FROM <table_source> của lệnh UPDATE hay
DELETE.

Lưu ý: Do Query Optimizer của SQL Server chỉ lựa
chọn Plan thực thi tốt nhất cho một truy vấn nên
Microsoft đề xuất rằng các nhà phát triển có kinh
nghiệm và các quản trị viên cở sở dữ liệu chỉ sử dụng
những gợi ý như một phương pháp cuối cùng vì
Optimizer luôn thực hiện tốt tác vụ này.

GROUPING SETS
GROUPING SETS cho phép người dùng viết một
truy vấn để tạo nhiều nhóm sau đó chỉ trả về một tập
giá trị. Tập giá trị này tương đương với một UNION
Simpo PDF Merge and Split Unregistered Version -
ALL của những hàng được nhóm khác nhau. Sử dụng
GROUPING SETS chúng ta có thể tập trung vào các

cấp độ thông tin khác nhau cần sử dụng ngoài việc sử
dụng phương pháp kết hợp một số kết quả tru yvaans.
Với khả năng thục thi truy vấn được cải tiến,
GROUPING SETS cho phép chúng ta lập báo cáo
với nhiều nhóm một cách dễ dàng. VÌ số lượng nhóm
luôn có thể tăng lên, nên sự đơn giản và những tiện
ích trong khả năng thực thi mà GROUPING SETS
mang lại sẽ trở nên hữu dụng hơ nhiều.
Simpo PDF Merge and Split Unregistered Version -


Nói cách khác, mệnh đề GROUP BY sử dụng
GROUPING SETS có thể kết xuất một nhóm kết quả
tương ứng với kết quả được tạo bởi một UNION
ALL của nhiều mệnh đề GROUP BY đơn vì mệnh đề
GROUP BY chỉ có tác dụng khi kết hợp.

Kết luận
Simpo PDF Merge and Split Unregistered Version -
Trong phần đầu này chúng ta đã tìm hiểu một số cải
tiến trong câu lệnh T-SQL trong SQL Server 2008 hỗ
trợ cho quá trình làm việc của các nhà lập trình.
Trong phần tiếp theo của loạt bìa viết này chúng ta sẽ
tìm hiểu chi tiết hơn về các kiểu dữ liệu được giới
thiệu trong SQL Server 2008.

Trong phần trước chúng ta đã tìm hiểu một số cải tiến
trong câu lệnh T-SQL của SQL Server 2008, gồm
IntelliSense, Grouping Set, bảng gợi ý FORCESEEK,
… Trong phần này chúng ta sẽ tiếp tục tìm hiểu

những kiểu dữ liệu mới được giới thiêu trong SQL
Server 2008.





Simpo PDF Merge and Split Unregistered Version -
SQL Server 2008 đã giới thiệu một số kiểu dữ liệu
mới giúp mở rộng đối tượng làm việc và cải tiến khả
năng thực thi của SQL Server. Ví dụ, kiểu User-
Defined Table (bảng do người dùng định nghĩa) và
Table-Valued Parameter cho phép người dùng đưa
một nhóm kết quả vào một thủ tục và lưu nhiều giá trị
trả về lên máy chủ, trong khi kiểu dữ liệu Date và
Time có thể giúp tiết kiệm tài nguyên bộ nhớ vì
chiếm dụng ít bộ nhớ hơn trong trường hợp người
dùng chỉ cần lưu ngày hay giờ, và giúp thao tác dễ
dàng hơn khi làm việc với chúng. Trong phần này
chúng ta sẽ tập trung tìm hiểu hai kiểu dữ liệu này, về
phạm vi sử dụng và khả năng ứng dụng.

User-Defined Table Type (UDTT) và Table-Value
Parameter (TVP)

Với SQL Server 2008 chúng ta có thể tạo một UDTT
(kiểu bảng do người dùng định nghĩa) theo định
Simpo PDF Merge and Split Unregistered Version -
nghĩa cấu trúc bảng. Để đảm bảo rằng mọi dữ liệu
trong UDTT đáp ứng được mọi tiêu chí, chúng ta có

thể tạo những rằng buộc riêng và những khóa chính
trên kiểu bảng này. Ngoài ra, chúng ta có thể sử dụng
một UDTT để khai báo nhiều TVP (tham số do bảng
định giá trị) cho các công cụ hay thủ tục lưu trữ để
gửi nhiều bản ghi dữ liệu tới một thủ tục lưu trữ hay
một công cụ mà không phải tạo một bảng tạm thời
hay nhiều tham số.

TVP giờ đây linh hoạt hơn rất nhiều, và trong một số
trường hợp nó còn có khả năng thực thi tốt hơn
những bảng tạm thời hay cung cấp nhiều phương
pháp khác nhau để không phải sử dụng đến các tham
số. Sử dụng TVP có các lợi ích sau, không sử dụng
khóa cho mẫu dữ liệu ban đầu từ máy trạm, không
cần phải biên tập lại lệnh, giảm truy cập tới máy chủ,
cho phép máy trạm chỉ định thứ tự sắp xếp và những
khóa chính, …
Simpo PDF Merge and Split Unregistered Version -

Khi các biến của bảng được được chuyển tác như
những tham số thì bảng này sẽ được hiên thực hóa
trong cơ sở dữ liệu hệ thống tempdb hơn là chuyển
tác toàn bộ nhóm dữ liệu trong bộ nhớ, điều này giúp
việc xử lý với lượng dữ liệu lớn hiệu quả hơn. Mọi
máy chủ thực hiện chuyển tác các tham số biến thiên
của bảng được chuyển tác bởi tham chiếu, sử dụng
tham chiếu này như một con trỏ tới bảng đó trong
tempdb để tránh tạo bản sao cho dữ liệu đầu vào.

Ứng dụng


Các lập trình viên luôn gặp phải rắc rối khi chuyển
nhiều bản ghi trong cơ sở dữ liệu để tận dụng tối đa
khả năng thực thi. Ví dụ, khi một lập trình viên cần
lập trình cho trang chấp nhận thứ tự gồm nhiều mục
thì họ sẽ phải viết theo logic riêng để nhóm mọi lệnh
chèn thàng một chuỗi định giới hay kiêu XML
Simpo PDF Merge and Split Unregistered Version -

×