1. Trang chủ
  2. » Công Nghệ Thông Tin

Tự học nhanh và hiệu quả SQL Server 7.0 part 6 pps

30 206 0
Tài liệu được quét OCR, nội dung có thể không chính xác

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 30
Dung lượng 2,57 MB

Nội dung

Trang 1

154 Bài 11: Cải tiến khả năng thực thi ca query Đ Microsoft â h

QL Server T-

Cải tiến khả năng thực thi của query

Trong bài này, bạn sẽ học cách sử dung Query Analyzer ctia SQL Server để khai thác và cải tiến cách SOL Server đáp tíng được

những query của bạn Bài này sẽ trình bày cho bạn cách server thực

thì các query của bạn và cách sử dụng Query Analyser để khai thác sự thực thi query, nhận biết các vấn đề và đánh giá các hiệu ứng của những thay đổi mà bạn thực hiện để xứ lý những vấn đề đó Đối với các query lớn, bạn sẽ sử dụng Internet server log cho một trong

những server của ban trong table Inetlog, bởi vì các cơ sở dữ liệu mẫu không chứa đủ dữ liệu Table là dạng chuẩn được sử dụng cho

việc ghỉ chép IS, nhưng một trường 1D s nguyên được bổ sung để

trình bày một số kỹ thuật tạo index Đối với các ví dụ khác, bạn sẽ

sứ dụng cơ sở dữ liệu pubs

Trang 2

Bài 11: Cải tiếu khả năng thực thi ctia query 155

Việc tỉnh chỉnh khả năng thực thi của query là một phần

quản lý khả năng thực thi của server Bất kỳ nguồn server vốn được sử dụng nhiều, chẳng hạn như các đĩa hay bộ nhớ, sẽ giới hạn khả năng thực thí của tất cả trình ứng dụng vốn cần sử dụng nó Khi nhiều trinh ứng dụng đòi hỏi cùng một nguồn tài nguyên cùng một lúc, một tinh huống được gọi là sự tranh chấp nguồn tài nguyên xảy ra và mỗi trình ứng dụng đợi đến lượt của nó đến khi nó có thể tiến hành Nếu tình trạng này vấn cứ xảy ra thì nguồn tài nguyên đó trở thành sự cản trở đối với việc điều khiển khả năng thực thi của toàn bộ server Việc nhận thấy và

sửa chữa loại sự cố toàn server này là công việc của nhà quản lý hệ thống hay DBA, nhưng bày này sẽ giúp bạn trợ giúp họ

bằng cách giảm đi những nhu cầu riêng của bạn trên server

đt Sử ĐỦ THỰC THỊ

Khi bạn gởi một query, SQL Server thực hiện ba bước chính

để đáp ứng query này:

1 _ Query được phân tích, một tiến trình trong đó SQL Server đọc text query và phân chia nó để hiểu được những gì mà

bạn đang yêu cầu nó thực hiện

2 Bộ tối ưu hóa của SQL Server đọc thông tin về cấu trúc,

việc tạo índex và lượng dữ liệu trong các table ma ban đang vấn tin Nó sử dụng thông tin này để hình thành một

sơ đồ query, các bước mà nó thực hiện để đạt được những kết quả mà bạn đã yêu cầu

4 Trong bước sau cùng, SQL Server thực thi các bước trong

Trang 3

156 Bài 11: Cải tiến khả năng thực thí của query Bằng cách hoạch định trước query, SQL Server co thể chọn phương pháp hiệu quả nhất để đạt được những kết quả mong muốn

Để chọn sơ đồ query tốt nhất, bộ tối ưu hóa của SQL Server

cố giảm tối thiểu các nguồn tài nguyên server được sử dụng trong việc đáp ứng yêu cầu Nguồn tài nguyên quan trọng nhất trong những nguồn tài nguyên này thường là chỉ phí !⁄O nhưng khả năng thực thi của CPU cũng có thể trở thành một vấn đề

trong một số trường hợp, bạn có thể kiểm tra những chỉ phí phát

Sinh do query của bạn bằng tùy chọn SHOWPLAN ALL trong các query hay với màn hình đồ họa của Query Analyzer - một

phương pháp dễ tiếp cận hơn nhiều

Kế hoạch thực thi text được mở bằng cách thực thi câu lệnh

Trang 4

Bài 11: Cải tiến khả năng thực thi của quer Eternia Gene advantedl| TP Show query pian FP Santitieet

TÔ, LCT Use ANSI quoted wlenttiers

FF Lee ANSI nulls, padding and wemings,

| system messages io

| Perform tansialon lor cheraclerdin {i

| Use regional stings when oulputing curency,rumber dates and tmos,

Trang 5

158 Bài 1L: Cải tiếu khả năng thực thí của query

¡-:Tab1e §can(OBJECT: ( [ đemoapp] [dbo] [1net1øg])} {1 row(s) affected)

Trong dữ liệu xuất, SQL Server đội SQL mà bạn đã yêu cầu

nó thực thi trở lại cho bạn và cho bạn biết những gì mà nó đã

thực hiện Trong trường hợp này, nó thông báo rằng nó sẽ thực

thí chỉ một bước trong query: quét table và truy tìm tất cả hàng từ

table inetlog Bởi vì table nay co han 200.000 hàng trong đỏ,

đây sẽ là một hoạt động khá dài Bạn có thể xem chi phí của một query bằng cách quay trở về các tùy chọn nối kết, tắt sơ đồ thực thi và mở Show stats J/O Kết quả giống hệt như sau khi

bạn thực thi cùng một query

SQL Server Execution Times:

CPU time = @ ms, elapsed time = @ ms SOL Server parse and compile time:

CPU time = @ ms, elapsed time = 165 ms

SQL Server parse and compile time:

CPU time = @ ms, elapsed time = 0 ms

clienthost

(result rows omitted) (207280 row(s) affected)

Table ‘inetlog' Scan count 1, logical reads 4118, physical

reads 1674, read-ahead reads 4120

SQL Server Execution Times:

CPU time = @ ms, elapsed time = 297672 ms, SOL Server parse and compile time:

CPU time = @ ms, elapsed time = 5 ms

SQL Server Execution Times:

Trang 6

Bài 11: Cải tiến khả năng thực thí của quer 159 Chú ý thời gian mà query này cần để thực thi, mae du query được chạy bên trong trên server Ở bài 2 đã đề cập rằng, bạn

hiểm khi sử dụng các query không cỏ giới hạn, các query không co ménh dé WHERE dé giảm số hàng được trả về Một query chạy lâ, một thuật ngữ mà bạn sẽ thấy trong Books Online, có

thể liên kết một server và ảnh hưởng đến những người dùng

khác

Không quá 5 phút, query được yêu cầu để thực thi được sử

dụng trong việc xử lý dữ liệu: query chỉ yêu cầu nó đọc tất cả hàng và cho ra cột clienthost, do đó thật sự không có bất kỳ công việc xử lý não được yêu cầu Thành phần gây lãng phí thời

gian thực sự là I/O

SQL Server cố giảm tối thiểu số lần mà nó phải đọc dữ liệu từ đĩa bằng cách giữ lại một bản sao của mỗi phần đữ liệu mà

nó đọc trong một vùng bộ nhớ được gọi là cache Dữ liệu cũ hay

dữ liệu ít thường được sử dụng sẽ dần dần được thay thé trong

cache bằng thông tin mới hơn, nhưng trong khi một hạng mục

có ở đó, SQL Server có thể truy tim nó từ cache thay vì đi đến

đĩa

Bạn có thể thấy SQL Server sử dụng đĩa được bao nhiêu

phần, và cache được sử dụng với mức độ như thế nào, trong dòng đầu tiên của khối số liệu thong ké sau cùng có chúa các phần sau đây:

2 Logical reads: Bao nhiêu lần ma SQL Server can dữ liệu từ đĩa 2 Physical reads: Bao nhiêu lần mà dữ liệu cần thiết phải được đẹc

Trang 7

160 Bài 11: Cai tiến khả năng thực th của query

7 = Read-ahead reads: Bao nhiéu lan ma SQL Server doc nhiều dữ liệu trong cache hơn so với mức yêu câu, dự đoán trước như cầu

Về việc SỬ dụng nó sau này

Trong ví dụ, SQL Server đã thực hiện một công việc tốt

trong việc đọc dữ liệu vì nó yêu cầu dữ liéu 4.118 lan (logical reads) nhung chi cung cap 1.674 physical reads Query van mat

một thời gian dài do lượng dữ liệu mà nó phải lấy từ đĩa

Kế hoạch thực thi text hữu dụng nếu bạn phải sử dụng một công cụ thay vì Query Analyzer (vi du, néu ban cũng có các

client SQL Server 6.5), nhưng Query Analyzer cung cấp một

giao diện dễ truy cập hơn nhiều trong màn hình sơ đồ thực thi đồ họa của nó Việc chọn Show Execution Plan trên menu Query Sẽ mở tính năng này Điều này không giống như việc mở tùy

chọn Show query plan trong hộp thoại Connection options; thực tế, bạn không thể sử dụng công cụ này cùng một lúc với các tùy

chọn pian (sơ đồ) và statistics (số liệu thống kê)

Khi bạn chạy một query với sơ đồ thực thi đồ họa được mở,

bạn sẽ có một tab khác bên dưới khung results được gọi là Ex-

ecution Pian Việc chọn tab này sau khi query hoàn tất sẽ trình bày cho bạn sự biến đổi sự thực thị của query bằng hình ảnh

Để hiển thị sơ đồ query trong hình 11.2, thực thi query sau đây trong cơ sở dữ liệu pubs bang sơ đồ thực thi đồ họa được mổ:

SELECT au_Iname, title

FROM authors

Trang 8

Bài 11: Cải tiến khả năng thực thi ciia query 161

Hình 11.2 Ké hoach thuc thi do hoa trong Query Analyzer

Màn hình đồ họa trình bày các bước tương tự mà bạn thấy

trong kế hoạch thực thi text: Mỗi biểu tượng trong màn hình hiển thị một bước trong tiến trình và mỗi mũi tên biểu thị dữ liệu được truyền từ bước này sang bước khác Biểu tượng ở phía bên trái là câu lệnh gốc mà bạn đã thực thi và các hoạt động bên phải là

các bước mà SQL Server phân chia các hoạt động thành những bước đó Nếu bạn di chuyển chuột lên trên một bước xử lý, một

Trang 9

162 Bài 11: Cải tiến khả năng thực thi của querw

Bảng 11.1 Thông tin về mật bưếc xử lý Description Physical Operation Logical Operation Row Count Fstimated Row Size LO Cost CPU Gost Total Subtree Cost Cost Manber of execttes Argument Mô tả .Mf chủng, Đước là gi Những gì nà Bước thực biện

Hoạt động XỌI mà nó thực biên

Số bàng dược tạo n4 Đi HẾu trình này

Kích cũ bàng tưng ĐÌNh đưục lao tạ Thời gian được sử dung cho civ boat dong dia

The: gian met CPU xii lh thong tin Thoi gian trong bree ney

Thời giản trong bước này

Số hìn mà bước dược lap lai

tệnh mà bước sẽ thực biện

Nếu bạn di chuyển cursor lên trên một trong những mũi tên, bạn thấy kích cỡ và số hàng được truyền từ hoạt động cấp thấp hơn đến hoạt động cấp cao hơn (nghĩa là từ phải sang trái) Bằng cách nhân kích cỡ với số hàng, bạn có thể ước tính lượng dữ liệu được truyền từ bước xử lý thấp hơn đến bước xử lý cao hơn

Đây là một công cụ hữu dụng và dễ sử dụng trong việc hiển

Trang 10

Bài 11: Cải tiến khả năng thực thử của querw 163

Bây giờ hãy xem cách bạn có thể sử dụng các index để thay đổi khả năng thực thi của các query

PHAN TICH INDEX

Nhu bạn có thể tưởng tượng, khả năng thực thị của query vượt trội hơn nhiều so với thởi gian mà nó mất Trong query quét

table tủ inetlog, phần lỏn thời gian thực thi có liên quan đến việc đọc dữ liệu tu đĩa: thoi gian CPU có thể bỏ qua Trong các trình ứng dụng client/server, thường có ba vùng mà bạn có thể cải

tiến khả năng thực thi: Z2 Sử gao liêp chent/Seruer

2 - Thời gian CPU Cua server A The gian cia server

Việc cải tiến sự giao tiếp client-server được điều khiển bởi sự lưu thông mạng giữa server cơ sở dữ liệu và client, phần lớn sẽ đòi hỏi bạn truy tìm chỉ dữ liệu mà bạn cần từ cơ sở dữ liệu,

chỉ vói mức độ thưởng xuyên mà bạn cần Thời gian CPU của

server thường không phải là một yếu tổ lớn trong khả năng thực thi của cơ sở dữ liệu, mặc dù có thể là như vậy nếu bạn kết hợp một lượng lớn đữ liệu hay thực hiện nhiều phép tính

Vấn đề gây khó khăn cho bạn thường là đĩa Cách dễ truy cập nhất để cải tiến các tần thực thí câu lệnh là thường với một

index (hoặc nhiều index) Như đã thảo luận, một index là một

Trang 11

164 Bài 11: Cái tiến khả năng thực thì của quer

được lưu trữ trong bộ nhớ Trong trường hợp tệ nhất, nó có thể

phải đọc index từ đĩa, nhưng nó đọc ít dữ liệu hơn nhiều như nó thưởng thực hiện nếu nó phải đọc toàn bộ table

Các hoạt động vốn nhận được sự chú ý là những hoạt động

đòi hỏi một lượng lớn các nguồn tài nguyên và một tỷ lệ lớn chí

phi của query Nếu việc sử dụng nguồn tài nguyên chính của

tiến trình là thởi gian CPU, bạn có thể thử tính trước dữ liệu bằng

cách đặt nó trong một table riêng biệt mà bạn làm mới tại các

khoảng thởi gian Thông thường hơn, bạn sẽ tìm thấy mội tiến

trình có một chỉ phí l/O lớn; đối với những vấn đề này, bạn có thể thử rằng buộc query phải giảm đi lượng dữ liệu được truy tim

trong bước đó hoặc sử dụng một index để tăng tốc tiến trình đó Sau đây là cú pháp để tạo mội index:

Cú pháp

CREATE [UNIQUE] {CLUSTERED } NONCLUSTERED] INDEX indexname ON tableref( columnret [, columnref .]

[ WITH options |

Một index UNIQUE ngan cam việc chèn dữ liệu bản sao

trong các cột mà nó †ạo index Việc tao mét index UNIQUE trén

một cột sẽ không tạo một constraint UNIQUE trén cét, nhung

việc bổ sung một constraint UNIQUE sẽ tạo một index tương

ứng

Một index CLUSTERED chỉ là một index có thể được tạo trên một table, sắp xếp thứ tự các hàng như chúng được lưu trữ trong file cơ sở dữ liệu Các index NONCLUSTERED được lưu

Trang 12

Bài 11: Cải tiến khả năng thực thi cia query 165 của table; có thể có đến 249 index trong những index này trên

méi table

Ghi chú

Có nhiều tùy chọn mã bạn có thể sử dụng kÌi tạo một index để chỉnh sửa cách nó được lưu trì dược sứ dụng bởi SQL Server Chú để nảy nằm

ngoài phạm vị của bài này bởi vì nó đối hỏi kien

lưu trữ vật lý của cơ sở đữ liệu nhiều hơn

những gi ma bai nay trinh bay cho bạn Tuy nhiền, các tùy chọn thường không được sử dụng do dó

bạn có thé thoải nưái bỏ qua chúng

Ví dụ sau đây tạo một nonclustered index có tên là idx

clientHost trên cột ClientHost của table inetlog:

CREATE INDEX idx ClientHost ON inetlog ( ClientHost )

Nói chung, bạn nên tạo một index khi một bước xử lý trong

sơ đồ query chỉ định một tiến trình quét table tạo ra một số lớn lần đọc đĩa Ví dụ, trong table inetlog, việc đếm các giá trị duy nhất của cột Clien†Host mất 5.81 giây trên máy tính mà không

có một index, trong đó 4.5 giây được sử dụng để quét table trên

đĩa Việc tạo một index như được trình bày trước đó đã giảm tổng thởi gian xuống 1.38 giây bởi vì nó đã thay thế tiến trình quét table bằng một tiến trình quét chỉ đòi hỏi 0.8 giây nhưng chia đôi lượng dữ liệu được sử dụng bởi các tiến trình cao hơn Mội lần nữa, bất cứ những gì bạn thực hiện, hãy đánh giá kết quả Phương pháp thường được sử dụng nhiều để đạt được những kết quả nhanh là sử dụng ba của sổ trong Query Ana-

Trang 13

166 Bài 11: Cai tiến khả năng thực thì của querụ Mở màn hình sơ đồ thực thi trong cửa sổ 1 và thực thi query mà bạn cần cải tiến

Trong cửa sổ thứ hai, tao index

Khi tiến trình tạo kết thúc, hãy đi đến cửa số thứ ba, mổ màn hình sơ đồ thực thi và thực thi cùng một query như ở

buớc 1 Bây giờ bạn có một cửa sổ hiển thị sơ đồ thực thi và các số liệu thống kê mà không có index và một của sổ trình bày khả năng thực thi với nó Bạn có thể di chuyển

qua lại giữa hai màn hình này để so sánh kết quả

Tại sao index không phải là mọi thứ? Có những vấn để sau

đây:

7 Dinhiên, các index chiếm khoảng trống đĩa, do đó việc tao chúng

khắp nơi mà không mang lại khả năng thực thị HH là một sự

lãng phí

Bộ tối tu hóa có thể không đạt được bất cứ điều gì tử rộ! index,

Bởi vì index được để nghị giảm số hay kích cỡ của các hàng vốn

phải được xử lý bởi server, một index trên một hàng có kiểu dữ

liệu này có thể giảm đi khả năng thực thí bằng cách tăng lượng ⁄O mà server phải thực hiện

Một index làm chậm các hoạt động cập nhật chèn và xóa bỏi tì SQL Server phải chỉnh sửa index ngoài table ra Hay nhớ: dánh

Trang 14

Bài T1: Cải tiến khá năng thực thi cia query 167

TOM LUOC

Thông tin trong bài này ít quan trọng hơn đổi với bạn nếu pan làm việc với các cơ sở dữ liệu nhỏ với một số người dùng

giới hạn

Trong bài này, bạn đã học cách SQL Server lap sd dé va thực thí các query của bạn và cách sử dụng Query Analyzer để

Trang 15

168 Bài 12: Phân tích dữ liệu bằng SQL Microsoft @ aL Server TÔ BAND, Phân tích đữ liệu bang SQL

Trong bài này, bạn sẽ học những tính năng cao cấp của câu

lệnh SELECT mà bạn có thể sử dụng để phân tích dữ liệu và tạo các

report một cách trực tiếp từ cơ sở dữ liệu Như bạn đã học, SQL là một ngôn ngữ mạnh mẽ để xử lý dữ liệu Bạn biết cách sử dụng SQL để Z Tập hợp nhanh chóng dữ liệu liên quan từ các table lưu trữ thông tin về các thực thể khác nhau

Z - Tạo các tập hợp dữ liệu mới từ các query

Trang 16

Bài 12: Phân tích dữ liệu bằng SQL 169

Trong bài này, bạn sẽ khai thác hai tính năng bổ sung của SOL Thứ nhất, mặc dù có nhiều tùy chọn trong các công cụ

báo cáo, nhưng bản thân SQL cung cấp những tính năng tổng kết và báo cáo đơn giản nhưng đa năng Bằng cách thực hiện

các chức năng phân tích trên server càng nhiều càng tốt, do

những giới hạn về các nguồn tài nguyên của nó, bạn có thể giảm đi đáng kể mức năng suất mạng và các nguồn tài nguyên

cần thiết cho client workstation của bạn

Thứ hai, mặc dù tất cả query mà bạn đã xem xét cho đến thời điểm này được thực thi ở một mức độ duy nhất, các query có thể tạo ra, bản thân những query này chứa những query

khác, do đó nhiều bước để phân tích dữ liệu có thể được kết hợp, được tự động hóa và được thực thi bởi server

CAC ROLLUP VA RAN TONG KET

Khi bạn đã vấn tin cơ sở dữ liệu trước đó, bạn đã nhận được

tất cả hàng vốn phù hợp với một tập hợp tiêu chuẩn, nhưng bạn

sẽ thường muốn nhiều hơn - ví dụ, bạn có thể muốn các tổng cho một loạt các cột số Bạn có thể chọn (SELECT) các hang và sau đó cộng chúng lại, nhưng SQL cung cấp cho bạn một

chuỗi hoạt động để gộp các hàng và thực hiện các phép tính

Bạn đã thấy một ví dụ của một hàm gộp Hàm COUNT được

sử dụng để đếm số hàng trong một kết quả được tìm trong các

hang tu SELECT, đếm chúng và sau đó tạo số hàng dưới dạng giá trị gộp Các hàm gộp do SQL Server cùng cấp được minh

Trang 17

170 Bài 12: Phân tích dữ liệu bằng SQL

Bang 12.1 Úác hầm hộp trong SQL Server

Hàm Mô tả

AVG Tính trung bình của các gi trị

COUNT Den số giá tị hay bàng

TIVNHNCT toại bỏ các gki trị bạn bàng lấp lai

VAN Tính giá tị lần nhất của các gki trí

1V Tinh gid trị nhỗ nhất của các gi trị

STDEV, STDEVP Tĩnh độ lệch chuẩn, độ lệch cbuẩu tap bop SUM Tính tổng của các gid Dị

VAR VARP Tink phuong sat phitong sai tdp bop

Những hăm này có thể được sử dụng trong bất kỳ hàm nào

nơi mà một tập hợp hàng được mong đợi, ví dụ:

SELECT SUM( price * ytd sales } FROM titles

Query này tạo một tổng số nhằm trình bày tất cả số lượng

bán hàng được ghi lại trong table titles; đây thường không phải là một số hữu dụng cho lắm Do đó, hãy cố tìm tên của các tác giả và số sách mà họ bán được là bao nhiêu:

SELECT au fname + ' ' + au Jnane Name, price*ytd_sales Sales

FROM authore

Trang 18

Bài 12: Phân tích dit liéu bang SQL 171 Name Abraham Bennet 681859, 0506 Reginald Blotchet -Halls 180397 2000 Cheryl Carson 201581 3000 Michel DeFrance 66515 54060 Innes dei Castillo 40619.6800 Ann Dull 81908 0080 Marjorie Green 81859.0500 Marjorie Green 55978 7880 Burt Gringlesby 61384.0500 Sheryl Hunter 81900 0080 Livia Karsen 8886.2506 etc,

Câu lệnh này sẽ truy tìm mỗi sách cho mỗi tác giả, và in số lượng bán ra cho mỗi sách

Nhập vào SQL, sau đây là cú pháp tổng hợp hơn của câu

lệnh:

SELECT { * | columref [, columnaref ] } UINTO newtablename |

FROM tableref [, tableref .]

[[INNER } {LEFT { RIGHT} OUTER ] JOIN tabieref

ON columaref = columnref .]

[WHERE expression [{AND | OR} expression .})}

[GROUP BY { ALL | columnref [, columnref .] } ]

[HAVING expression }

[ORDER BY columref, |, columnref .j {DESC]] (COMPUTE agg func [, agg_func ]

Trang 19

172 Bài 12: Phân tích dữ liệu bằng SQL Hạng mục mới đầu tiên, INTO, don gian nhat: SELECT

INTO tao mét table mdi Kết quả của query sẽ được lưu trữ vào

một table có tên là newtablename

GROUP BY là tiêu điểm của ví dụ giới thiệu Bạn sử dụng

mệnh đề này để thực hiện một rollup, hay sự tổng kết hàng của dữ liệu, bằng cách sử dụng một hay nhiều hàm gộp để tóm 'ắt các cột được nhóm lại Trong ví dụ, các sách của Marjorie tao nhiều hàng với các tổng cho mỗi sách

SELECT au_Tname+' '+ au Iname 'Author Name', SUM(ytd_sales * price) Sales

FROM authors

Trang 20

Bài 12: Phân tích dữ liệu bằng SQL 173 Đầu tiên, bí danh Name đã được thay thế bằng ‘Author

Name' để làm cho chu thích dễ hiểu hơn, vì các khoảng trống có

nghĩa trong SQL, các dấu trích dẫn đơn phải được đặt xung

quanh nó để cho SQL Server biết rằng cả hai từ được đưa vào bí danh Kế tiếp, hãy yêu cầu SQL Server tính tổng số tiền Biểu

thức yid_sales." price trong một hép gop SUM được bao bọc Sau cùng, mệnh đề GROUP BY ở cuối được thêm vào để yêu

cầu SQL Server kết hợp các hàng có các tên tác giả giống nhau

Kết quả, SQL Server phân loại các hàng trước khi cho ra

chúng, và sau đó kết hợp chúng trên các cột trong danh sách

GROUP BY, đồng thời thực hiện các phép tính được yêu cầu với các hàm hộp Cuối cùng, Mariorie có được một dòng với tổng của tất cả sách của cô ta

SQL Server cần biết tất cả chỉ tiết về cách kết hợp các hàng

trong kết quả Do đó, khi bạn sti dung GROUP BY, bạn phai dat tất cả cột vào danh sách GROUP BY vốn không được bao bọc

trong một hàm gộp, ngay cả nếu dữ liệu sẽ không tạo các bản sao trên một cột khác

HAVING toại bỏ các hàng sau bước gôm nhóm theo cùng môt cách mà WHERE loại bỏ chúng ra khỏi các hàng được trả

về từ SELECT Ví dụ, nếu bạn theo dõi GROUP BY trong ví dụ

trước có HAVING và một tiêu chuẩn, bạn sẽ có được những kết

Trang 21

174 Bài 12: Phân tích dữ liệu bằng SQL

SELECT au_fname+' ‘+ au_iname ‘Author Name’, SUM(ytd_sales * price) Sales

FAOM authors

JOIN titleauthor ON authors.au_id = titleauthor.au_id JOIN titles ON titleauthor.title_id +itles.titie_id

GROUP BY authors.au_fname, authors.au_Iname

HAVING SUM(ytd_ sales * price) > 100000 Author Name Sales Reginald Blotchet-Halls 180397 2000 Cheryl Garson 201501 2000 Marjorie Green 137837 6300 Michael O'Leary 107702 2500 (4 row(s) affected)

Chú ý rằng bạn không thể sử dung bi danh trong HAVING,

bạn phải sử dụng biểu thức mà bạn đã sử dụng trong SELECT để tạo ra giá trị

ORDER BY phân loại dữ liệu xuất theo các cột mà bạn xác

định Để phân loại theo thứ tự đảo ngược (“giảm dần”), bạn sử dụng từ khóa DESC

COMPUTE [BY) tạo các tổng phụ của dữ liệu trong các hàng dữ liệu xuất sau khi tổng kết va phân loại trong các phép toán

GROUP BY va ORDER BY Để chỉ tổng kết các số lượng bán

Trang 22

Bài 12: Phân tích đữ liệu bang SQL 175

SELECT au fname+' '+ au Iname 'Author Name", SUM(ytd_sales * price) ‘Sales’

FROM authors

JOIN titieauthor ON authors.au_id = titleauthor.au_id JOIN titles ON titleauthor.title_id = titles.title_id GROUP BY au_fname, au_lnane

ORDER BY ‘Author Name!

COMPUTE SUM( SUM(ytd_sales * price) Author Name Sales Abraham Bennet 81859 0500 Akiko Yokomoto 61384.0500 Sheryl Hunter 1900.0000 Stearns Macfeather 54414.4500 Sylvia Panteley 7856, 2500 1476368 618

Câu lệnh này cho ra cùng một rowset như trước đó, và sau

đó báo cáo tổng của tất cả số lượng bán hàng sau cùng COMPUTE BY hơi kỳ lạ trong đó nó đòi hỏi dữ liệu được phân loại, do đó bạn phải sd dung ménh dé ORDER BY dé

chuẩn bị dữ liệu cho nó Nó sẽ tính các hàng dữ liệu theo một cách tương tự như GROUP BY ngoại trừ nó cũng sẽ trình bày cho bạn đữ liệu nguồn SQL sau đây sẽ tính các tổng phụ theo

Trang 23

176 Bài 12: Phân tích dữ liệu bằng SQL

mm

SELECT au fname+' '+ au_Jname 'Author Name’, ytd_sales * price FROM authors JOIN titleauthor ON authors.au_id =

JOIN titles ON titleauthor.title_id GROER BY ‘Author Name’

COMPUTE SUM( ytd_sales * price ) BY ‘Author Name! titleauthor.av_id = titles, title_id eri Author Name Abraham Bennet 81859 8500 sum 81859 8500 Marjorie Green 81859 0500 Marjorie Green 55978 7800 197837 8300 Sylvia Panteley 7856.2500 sum 7856 2500

Sự cân bằng của câu lệnh SELECT, những mệnh đề được

trình bày ở đây, có thể nhanh chóng tạo ra các báo cáo và bản tổng kết từ cơ sở dữ liệu Mặc dù bạn có thể đạt được những kết quả tương tự bằng các gói phần mềm lập báo cáo, nhưng chúng

Trang 24

Bài 12: Phân tích dữ liêu bang SQL 177 LIÊN KẾT DỮ LIEU UOT CAC QUERY CON

Cac query ma ban đã thấy cho đến thời điểm này có tiêu

chuẩn cụ thể trong việc liên kết các table và xác định các hàng

để truy tìm Đây là một yêu cầu thông thường, nhưng cũng có những tình huống trong đó bạn sẽ không cỏ sẵn dữ liệu mà ban cần để tìm kiếm, Ví dụ, nhiều lúc tiêu chuẩn mà bạn muốn sử dụng để giới hạn các hàng trong phần WHERE của SELECT sẽ

xuất phát từ một table hay query khác nào đó

Bất cứ nơi nào mà bạn đặt một biểu thức trong query của

ban, ban có thể sử dụng một query khác thay vào đó Ví dụ,

trong query để truy tìm các tổng số lượng bán hàng tử phần trước Giả sử bạn muốn thưởng cho các tác giả có số sách bán

chạy nhất, những người có số lượng sách bán cao hơn giá trị trung bình, bạn cỏ thể vấn tin mức trung bình từ table và sau đó

sử dụng nó trong mệnh đề WHERE của một select thứ hai, những điều này làm lãng phí thời gian và công sức, đặc biệt nếu query của bạn được cung cấp trong một chương trình hay script ASP mà bạn viết Thay vào đó, nơi mà bạn sẽ đặt giá trị cho mệnh đề WHERE, hãy thay thế nó bằng query cho giá trị trung bình trong các dấu ngoặc đơn:

SELECT CONVERT( varchar (25),

au fname + ' ` + au_iname ) Name, price*ytd_sales Sales, Title FROM authors

Trang 25

us Bat đà: Phản tích dữ liệu bằng SQL

Emm

Name Sales Title

Cheryi Carson 201581 2080 But Is It User Frien Reginald @lotchet-halls 180397 2000 Fifty Years an Bucki

Aan Duli 81900 e000 Secrets of Silicon Vv Sheryl Hunter 81900 0800 Secrets of Silicon Vv Macjorie Green 81859 0506 The Busy Executive's Abraham Bennet 81859 0500 The Busy Executive's Dean Straight 81859, 0500 Straignt Talk About Johnson White 81399 2800 Prolonged Data Depri Michel DeFrance 66515 5400 The Gourmet Microwav Anne Ringer 66515.5400 The Gourmet Microwav Do đó có các số lượng sách bán chạy nhất được phân loại theo các số lượng bán giảm dần

Bạn cũng có thể tham chiếu query chính (query bên ngoài)

từ query con (query bên trong) Dạng câu lệnh này được gọi là một query con tương quan hiếm khi có bởi vì hầu hết các hoạt động mà bạn xem xét một query con tương quan có thể được thực hiện bằng cách sử dụng các phần nối; nếu có một mối

quan hệ để liên kết query bên trong và query bên ngoài, nó có

thể thường được đơn giản hóa bằng một phần nối thay vào đó

Các query con tương quan hữu dụng chủ yếu nơi chỉ có một mối

quan hệ không chặt chẽ giữa các table mà phải được so sánh để chọn

Ví dụ, câu lệnh sau đây truy tìm các tác giả có tên phù hợp

Trang 26

Bài 12: Phân tích dữ liện bang SQL 179

SELECT au_fname, au lnane FROM Authors au

WHERE EXISTS (

SELECT au_id FROM Authors au2

WHERE au2.au lname LIKE au.aU Inane + '%' AND au2.au_id <> au.au_id ) au_tname au_1nane Marjorie Green Albert Ringer Anne Ringer

Để ám chỉ query bên ngoài, bạn phải tạo bí danh cho bất kỳ table chung, như đã trình bày Điều quan trọng cần nhớ khi sử dụng một query con là câu lệnh bên trong sẽ thực thì một lần

cho mỗi hàng trong câu lệnh bên ngoài Do đó, khi câu lệnh bên

trong của bạn được thực thi, nó có thể tham chiếu các giá trị

trong hàng hiện hành trong query bên ngoài Trong ví dụ này,

query bên ngoài chọn tất cả các hàng authors, và sau đó đối với

mỗi hàng, thực thi query bên trong Các query SELECT bên

trong cho bất kỳ tác giả khác có các tên tương tự; hàm EXIST cho ra true nếu bất kỳ phần tương xứng nào được tìm thấy (nghĩa

là, nếu SELECT bên trong cho ra bất kỳ hàng nào) Tiêu chuẩn

Trang 27

IS0 Bài 12: Phần tích dữ liệu bằng SQL <> au.au_id, ngân nó khỏi phù hợp với cùng một tác giả hiện có

trong câu lệnh bên ngoài,

TÓM Lược

Trong bài này, bạn đã học phần còn lại của câu lệnh SE- LECT cua SQL Các query con là những query mà bạn có thể xếp lồng trong các query để thực hiện phép phân tích phức tạp

Trang 28

Bài 13: Ấn định dữ liệu 181 Microsoft ® SQL Server 79 BANS, Ấn định đữ liệu

Trong bài này, bạn sẽ vượt khói phạm ví sứ dụng các cơ sở dữ

liệu hiện có và học cách tạo cơ sở dữ liệu riêng của bạn

Bài này sẽ trình cho bạn cách SQL Server lưu trữ dữ liệu của bạn và cách tạo, chỉnh sửa và xóa các đối tượng trong cơ sở dữ liệu

Cú dữ SỞ DỮ LIỆU, FILE, UÑ NHOM FILE

Mỗi cơ sở dữ liệu bạn làm việc với có ít nhất hai phần phụ: sự lưu trữ dữ liệu và sự ghi ghép giao tác (transaction log) Sự lưu trữ dữ liệu là nơ mà cơ sở dữ liệu lưu trữ tất cả các đối tượng

trong cơ sở dữ liệu của bạn, kể cả các phần ấn định table, dữ

liệu table, các phần ấn định view, các thủ tục được lưu trữ, login,

mọi thứ Transaction log lưu trữ mọi thứ bạn thực hiện đối với cơ

Trang 29

12 Bài 13: Ấu định dữ liệu

Transaction toy

Bài 4 đã trình bày cho bạn cách sử dụng một giao tác (trans- action) để thử nghiệm một câu lệnh mà không áp dụng những thay đổi mà nó đã thực hiện đối với cơ sở dữ liệu Cơ chế nền

tảng để thực hiện điều này khác đơn giản về mặt khái niệm Khi bạn bắt đầu một câu lệnh (chẳng hạn như một UPDATE) vốn sẽ thay đối dữ liệu trong cơ sở dữ liệu, server tạo một hạng mục giao tác mới trong transaction log Trước khi nó thực hiện bất kỳ thay đổi, nó ghi tất cả thay đổi mà nó sẽ thực hiện vào transac-

tion record đó, với bất kỳ thông tin cần thiết để undo, hay tré vé những thay đổi Chỉ sau khi dữ liệu giao tác được lưu trữ trong

transaction log, nó sẽ thực hiện những thay đổi đối với dữ liệu trong các tabie cơ sở dữ liệu Khi các thay đổi được hoàn tất, nó

đánh dấu hạng mục giao tác trong transaction log là được chuyển giao (committed), hay hoan chinh (complete) va cé dinh (perma- nent)

Theo cách này, cơ sở đữ liệu giữ lại tính toàn vẹn dữ liệu,

ngay cả nếu một sự cố xảy ra vào giữa giai đoạn của một thay đổi Nếu sự cố điện xảy ra khi đang ở giai đoạn ghi transaction Sang Transaction log, server sẽ chỉ xóa transaction khi nó khởi động trong lần kế tiếp Nếu sự cố xảy ra khi nó thay đổi dữ liệu trong các table cơ sở dữ liệu (bước thứ hai), nó có thể sử dụng

Trang 30

Bài 13: Ấn định dữ Hie

$ự lu tr tlữ liệu

Môi cơ số dữ liệu được lưu trữ trong một hay nhiều nhị m file, mỗi nhóm file sử dụng một hay nhiều file dữ liệu trên cia

cứng để chứa dữ liệu từ cơ sở dữ liệu (hình 13.1) Database Database Obecte LL PRIMARY File Group Another File Group = tủa — Hình 13.1 Mối quan hệ của các cơ sở dữ liệu, hồm file và file \ [

Khi bạn tạo một cd sở dữ liệu trong SQL Server, bạn phải cung cấp cho nó tên các file mà nó sẽ su dung va transaction

log Những tên này sẽ được tạo trong nhóm file PRIMARY và

được sử dụng để lưu trữ cả dữ liệu lẫn thông tin vốn mô tả cơ sở

Ngày đăng: 12/08/2014, 18:21