ดัชนีหนังสือ DabaBase [2]


Home Page  |   รายการบทความ   |   ลิงค์ที่เกี่ยวข้อง   |   laploy.com  |  เกี่ยวกับผู้เขียน

 

ดัชนีหนังสือ DabaBase [2]

วันนี้ทำดัชนีหนังสือ DabaBase เสร็จเรียบร้อยแล้ว ขอนำมาโพสไว้ที่นี่ให้ดูเล่นหน่อยนะครับ

Data bandwidth 80                      
Data center 83 684                    
Data Collection 533 535                    
Data Control Language 171                      
Data Definition Language 91 171                    
Data Filtering 729                      
Data Manipulation Language 171                      
Data mart 79                      
Data mining 181                      
Data model 247                      
Data Modeler 689                      
Data Page 211                      
Data Set 664                      
Data Source 664 861                    
Data Source Properties 665                      
Data tier 691                      
Data warehouse 60 79                    
Database Administator (DBA) 163                      
Database Engine 169                      
Database Layer 166                      
Database mail 178 581                    
Database management system (DBMS) 54                      
Database Server 83                      
Database System 52                      
DataGridView 608 861                    
DATE 301 305                    
DATEDIFF 345 346                    
datetime 305 473                    
datetime2 305                      
datetimeoffset 305                      
DBA 88 174 178 180 299 484 517 542 572 580 620 867
dBASE II 80                      
DBCC 516                      
dbcreator 518                      
DBMS 54                      
dbo 313                      
DC 533                      
DDL 91 250                    
debug 276 701                    
DECIMAL 63                      
Decision Support System 179                      
DECLARE 275 301 491 525                
default value 724                      
Degree of Parallelism 522                      
Denornalize 88                      
DENSE_RANK 565 825                    
Deploy 702                      
Deployment Folder 777                      
Derived Table 262 337 341 358 474              
DESC 332                      
DET 336 337                    
Detail Table 336                      
Determinant 122 146                    
Deterministic Function 640                      
Deterministic Mathematic 246                      
Development Workstation 698                      
Dictionary 214                      
Difference 382 814                    
Disk Usage Summary (DUS) 538                      
Display Estimated Excution Plan 233 518                    
DISTINCT 324 422 429 477 543              
Distributed Transaction Coordinator 178                      
Divide 381 382                    
DKNF 157                      
DL 257 383                    
DLT 435                      
DMF 517                      
DML 171 578 641                  
DMV 517                      
Do/While 286                      
Document Map 731                      
Document Windows 184                      
Domain Key Normal Form 157                      
DR 669                      
Drill Down 686 718                    
Drill Through 733                      
DROP 621 652                    
DROP ASSEMBLY 802 807                    
DROP FUNCTION 804                      
DROP INDEX 230 231                    
DROP TABLE 314                      
DROP TRIGGER 578                      
DROP TYPE 803                      
DS 664                      
DSQL 588                      
DSS 179                      
DT 337 340 341 344 345 364 370 381 393 399 415 423
DTS 664                      
DXM 181                      
Dynamic 485                      
Dynamic Management Function 517                      
Dynamic Management View 517                      
Dynamic SQL 590                      

ดัชนีหนังสือ DabaBase [1]


Home Page  |   รายการบทความ   |   ลิงค์ที่เกี่ยวข้อง   |   laploy.com  |  เกี่ยวกับผู้เขียน

ดัชนีหนังสือ DabaBase [1]

วันนี้ทำดัชนีหนังสือ DabaBase เสร็จเรียบร้อยแล้ว ขอนำมาโพสไว้ที่นี่ให้ดูเล่นหน่อยนะครับ

!Execute 203                  
.NET Framework 73 162 689 784            
.NET Framework Assembly 789                  
@@ 295                  
@@ERROR 631                  
@@FETCH_STATUS 485                  
<> 447                  
0NF 129                  
0th Normal Form 129                  
1NF 128 131 138 253            
1st Normal Form 128                  
2nd Normal Form 132                  
2NF 132 137 138              
3NF 138 139 142              
4NF 149                  
5NF 152                  
5th Normal Form 152                  
ABS 641                  
accent-insensitive 215                  
accent-sensitive 215                  
Achived Data 79                  
Actual Execution Plan 514                  
Add-On 176                  
Ad-hoc 88                  
Adjacent Column Group 746                  
Administrator 55                  
ADO 271 507                
ADO.NET 848 850 854              
AdventureWorks 52 55 56 183 186 187 233 314 489 525
AdventureWorks2008 189 271 289 573 575 665        
AdventureWorksLT2008 202 333 338 348            
AEP 517 519                
AFTER 581                  
Aggregate 424 429 834              
Aggregate Biding 509                  
Aggregated Attribute 432                  
Aggregation Operator 431                  
Algebra 386                  
Alias 300 327 363 470 557          
ALTER ASSEMBLY 802 807                
ALTER FUNCTION 804                  
ALTER PROC 621 623                
ALTER TABLE 315                  
Alternate Indexing 210                  
AN 249                  
Analysis Service 181                  
AND 325 371 417              
Anomaly 119                  
Anonymous Types 859 866                
ANSI 272                  
ANSI/ISO SQL 264                  
AP 514                  
API 693                  
APL 246                  
Application 60                  
Array 64                  
AS 298 404 559 620            
Ascending 211                  
ASCII 812                  
ASP.NET 182 691 703              
Assembly Manifest 786                  
Atomic Operand 380                  
Attribute 247 249 380              
Authentication 183                  
Auto counter 62                  
Auto Hide 199                  
Auto Hide All 199                  
Auto Numbering 248 249                
Auxiliary Table 245                  
AVG 342 430 835              
Back end 264                  
Bag 380                  
Base Table 640                  
Batch 269                  
Batch Separator 269                  
BCNF 145 147                
Begin/End 283 297 654              
Best Practice 294                  
BI 182                  
bigint 645                  
Bill of Materials 492                  
binary 64                  
BIT 264                  
BNCF 417                  
BOM 492 633                
Bookmark Lookup 220 237                
Breakpoint 276 280                
BSD 66 269                
BTree 210 214 216 221 226 235        
Buffer Manager 169                  
Build 702 789                
Build-in Collection 736                  
Business Intelligence 61 179 662 686            
Business Intelligence Development Studio 690                  
Business Rules 92                  
C ASE 292                  
C# 72 96 162 172 246 268        
Cache 514                  
Cached plan size 522                  
Candidate Key 123 145                
Cartesian Product 336 412                
CASE 290 328 333 589            
CASE WHEN 651                  
case-insensitive 215                  
case-sensitive 215                  
CAST 263 338 473 498            
CBP 510                  
CE 411                  
CHAR 63 813                
CHARINDEX 813                  
Chart 712 755                
CHECKSUM_AGG 836                  
Child Group (CG) 713                  
Child Table 67 106                
CI 221 223 224 235            
CK 222 224                
Clause 361 862                
Client Layer 166                  
CLR 162 172 770 785 854          
CLR Routine 786                  
Cluster 53                  
Cluster Index 218 223                
Cluster Key 224                  
Clustered Index 528                  
Clustered Index Scan 234 524 528              
Clustered Index Seek 235                  
Clustered Table 220 221                
COALESCE 263 292 347              
Collation 215                  
Collection 124                  
Column Group Pane (CGP) 712                  
COM+ 770                  
Combination 336 493 552              
Comma-delimited file 67                  
Comment 200 273                
Common Language Runtime 172 785                
Common Table Expression 272 341 488              
Composite index 211                  
Composite Key 113 127 130              
Compound Key 113 130                
Computed Column (CC) 530                  
Concurrent 81                  
Concurrent processing 244                  
Concurrent programming 250                  
Condition Expression 411                  
Connection Properties 189                  
Console Application 494 850                
Constant 260 454                
Constraint 114 313 577              
Constraint Programming 246                  
Contains 863                  
CONTAINSTABLE 829                  
Continue 280 287                
Continuum Datum 252                  
CONVERT 263                  
correlated 471                  
Correlated Sub-queries 457 467                
Cost 233                  
Cost-Based Plan 510                  
COUNT 430 490 498 557 837          
COUNT_BIG 838                  
Covering Index 528 531                
CPU 233 510                
CREATE AGGREGATE 802                  
CREATE ASSEMBLY 802 806                
CREATE FUNCTION 804 808                
Create Index 228                  
CREATE PROCEDURE 605                  
CREATE SPROC 621                  
CREATE TABLE 312                  
CREATE TRIGGER 579                  
CREATE TYPE 803                  
CROSS APPLY 650                  
CROSS JOIN 366                  
Crystal Report 180 685                
CS 467                  
CSV 67                  
CT 220 221                
CTE 260 272 341 488 489 490 495 563 564 634
Cube 181 550 554              
Cursor 451 484                
Custom Assembly 770 773                
Custom Code 770                  
Custom Data Type 172                  
Cyclic Dependency 124                  

หาวันเกิดโดยไม่สนปี


Home Page  |   รายการบทความ   |   ลิงค์ที่เกี่ยวข้อง   |   laploy.com  |  เกี่ยวกับผู้เขียน

หาวันเกิดโดยไม่สนปี

กลางดีกคืนหนึ่งขณะที่ผู้เขียนกำลังสะลึมสะลือมีผู้อ่านท่านหนึ่งถามมาด้วย MSN ว่าจะเขียนคิวรีอย่างไรให้หาวันเกิดของพนักงานที่เกิดในระหว่างวันและเดือนหนึ่งๆ โดยไม่สนใจว่าเกิดปีอะไร ผู้เขียนเดาว่าจะนำไปใช้ส่งอีเมลอวยพรวันเกิดหรืออะไรสักอย่าง โดยมีการทำงานดังนี้

SELECT * FROM Table WHERE

BirthDate มีค่าระหว่างวันเริ่มและวันจบโดยไม่จนใจปี

ผู้เขียนไปนอนพอตื่นมาวันรุ่งขึ้นก็เปิดโปรแกรม Microsoft SQL Server Management Studio เขียนคิวรีทดสอบกับดาต้าเบส Northwind (2008) ที่มีตารางเก็บข้อมูลพนักงานพร้อมวันเกิดดังนี้

จะเห็นว่ามีพนักงานทั้งหมดเก้าคน เกิดกันตั้งแต่ปี 1948 ไปจนถึง 1966 ต่อมาผู้เขียนเขียนสคริปต์คัดกรองเอาเฉพาะผู้ที่เกิดวันที่ 1 ถึงวันที่ 9 เดือนมกราคมถึงมีนาคม โดยไม่สนใจว่าเกิดปีอะไร ได้เป็นคิวรีหน้าตาแบบนี้

 

 ไม่อยากพิมพ์ใช่ไหมครับ ก๊อปปี้โค้ดข้างล่างนี้ได้เลย

USE Northwind;
GO
DECLARE @StartDate DATETIME;
DECLARE @EndDate DATETIME;
SET @StartDate = CONVERT(datetime, '2009-01-01');
SET @EndDate = CONVERT(datetime, '2009-03-09');
SELECT EmployeeID,LastName,BirthDate
FROM Employees
WHERE (MONTH(BirthDate) >= MONTH(@StartDate) and 
       MONTH(BirthDate) <= MONTH(@EndDate)) and
      (DAY(BirthDate) >= DAY(@StartDate) and 
       DAY(BirthDate) <= DAY(@EndDate))
GO

วิธียืด-หดเมทริกซ์


Home Page  |   รายการบทความ   |   ลิงค์ที่เกี่ยวข้อง   |   laploy.com  |  เกี่ยวกับผู้เขียน

 

วิธียืด-หดเมทริกซ์

 

ในหัวข้อ 27.1.5 ท่านได้เรียนวิธีทำรายงานที่ยืดหดได้ (Drill Down ย่อ DD) กับ Tablix แบบ Table ในหัวข้อนี่ผู้เขียนจะสาธิตการทำ DD กับเมทริกซ์บ้าง ซึ่งมีหลักการคล้ายกันๆ แต่การทำ DD กับเมทริกซ์จะก้าวหน้ากว่าเพราะนอกจากจะสามารถยืดหดตามแนวนอนได้เหมือน Table แล้ว ยังสามารถยืดหดตามแนวตั้งได้อีกด้วย

การหดเมทริกซ์ทั้งแนวนอนและแนวตั้งช่วยให้ผู้ใช้รายงานพิจารณาเฉพาะยอดรวมได้ง่าย ขนาดของรายงานจะไม่กว้างหรือยาวจนล้นหน้า เมื่อผู้ใช้ต้องการดูรายละเอียดส่วนใดก็สามารถยืดดูรายละเอียดเฉพาะส่วนที่ต้องการได้ ตัวอย่างของรายงานเมทริกซ์แบบ DD เป็นดังภาพ 27-121 ถึง 27-123

ภาพ 27-121: รายงานแบบเมทริกซ์เมื่ออยู่ในสภาพหดทั้งแนวตั้งและแนวนอน

ภาพ 27-122: รายงานแบบเมทริกซ์เมื่ออยู่ในสภาพยืดแนวนอนเฉพาะหมวดสินค้า Components และหดแนวตั้ง

ภาพ 27-123: รายงานแบบเมทริกซ์เมื่ออยู่ในสภาพยืดแนวตั้งเพื่อแสดงปีที่ขาย และยืดแนวนอนเฉพาะหมวดสินค้า Components

รีเคอร์ซีฟแบบไฮราคี


Home Page  |   รายการบทความ   |   ลิงค์ที่เกี่ยวข้อง   |   laploy.com  |  เกี่ยวกับผู้เขียน

รีเคอร์ซีฟแบบไฮราคี

 

อย่างที่เรียนไปแล้วตอนต้นว่ารีเคอร์ซีฟเหมาะใช้เข้าถึงข้อมูลที่ลดหลั่นเป็นลำดับชั้นหรือไฮราคี (Hierarchy) ดังนั้นในหัวข้อนี้ผู้เขียนจะเสนอตัวอย่างคิวรีที่มีการทำงานเช่นนั้นบ้าง ในภาพ 17-16 เป็นคิวรีแสดงลำดับชั้นสายการบังคับบัญชาของพนักงานในบริษัท ผลลัพธ์จะเป็นอย่างที่เห็นในกรอบ Results โปรดสังเกตว่าข้อมูลแถวแรกคือพนักงานรหัส 109 ชื่อ Ken กินตำแหน่ง CEO คืออยู่สูงที่สุดในลำดับชั้นของสายการบังคับบัญชา คอลัมน์ Level1 จึงเป็น 1 ส่วนคอลัมน์ Hierarchical จะมีชื่อคนผู้นี้เพียงชื่อเดียว

แถวถัดมาพนักงานรหัส 273 ชื่อ Brian ดำรงตำแหน่งรองประธานฝ่ายขาย มีฐานะต่ำกว่า CEO อยู่เพียงลำดับเดียว ค่าในคอลัมน์ Level1 จึงเป็น 2 และผู้เขียนกำหนดให้ใส่เครื่องหมายบวก ( + ) ไว้หน้าชื่อ เครื่องหมายบวกนี้ผู้เขียนกำหนดในคิวรีว่าจะใส่เท่าจำนวนลำดับชั้น ส่วนคอลัมน์ Hierarchical มีชื่อคนอยู่สองชื่อคือ Ken แลชื่อคนผู้นี้

ไหนๆ ก็ดูตัวอย่างผลลัพธ์มาแล้วถึงสองแถว ลองมาดูกันอีกสักแถวจะเป็นไรไป แต่ไม่ดูแถวที่สาม ให้ข้ามไปดูแถวที่สี่ซึ่งเป็นพนักงานรหัส 285 ชื่อ Jae ตำแหน่งพนังงานขาย คนผู้นี้มีผู้บังคับบัญชาเหนือขึ้นไปถึงสามระดับ ค่าในคอลัมน์ Level1 จึงเป็น 4 และมีเครื่องหมายบวก + นำหน้าชื่ออยู่สามอัน ส่วนคอลัมน์ Hierarchical มีชื่อคนอยู่สี่ชื่อคือ Ken, Brian, Amy และชื่อคนผู้นี้

ภาพ 17-16: คิวรีแสดงลำดับชั้นสายการบังคับบัญชาของพนักงานในบริษัท

 

คิวรีในภาพ 17-16 ยืดยาวถึง 43 บรรทัด แต่ท่านไม่ควรระย่อและท้อหนี เพราะโค้ดนี้สักแต่ว่ายาว ไม่มีหลักการอะไรซับซ้อน ใช้เพียงเทคนิคง่ายๆ เหมือนคิวรีในหัวข้อ 17.3.4 บรรทัดที่ 9 ถึง 20 คือคิวรี AM บรรทัดที่ 22 ถึง 36 คือคิวรี RM สองคิวรีนี้ถูกนำมายูเนียนกัน ได้ผลลัพธ์เป็น CTE ชื่อ DirectReport

โค้ดบรรทัดที่ 3-7 ประกาศส่วนหัวของ CTE ทั้งคอลัมน์ Name และ Hierarchical ต่างทำหน้าที่เป็นสตริงเก็บชื่อพนักงานที่นำมาจากตาราง Contact เมื่อรีเคอร์ซีฟทำงานแต่ละรอบ สตริงนี้จะถูกเพิ่มตัว + หรือชื่อพนักงานเข้าไป โดยโค้ดใน AM บรรทัดที่ 10,11 และ 15,16 และโค้ดใน RM บรรทัดที่ 23,24 และ 29,30 ตามลำดับ

คอลัมน์ Title และ ID เป็นคอลัมน์ที่ได้ข้อมูลจากตาราง Employee ส่วน Level1 ทำหน้าที่เป็นตัวนับรอบการรีเคอร์ซีฟ โดยใน AM จะเป็น 1 เสมอเพื่อให้เป็นค่าเริ่มต้น ส่วนใน RM คอลัมน์นี้จะเพิ่มค่าขึ้นเรื่อยจนถึงลำดับการบังคับบัญชาของพนักงานผู้นั้น

คิวรีเมื่อทำ Index Seek ในดรรชนีแบบ CI


Home Page  |   รายการบทความ   |   ลิงค์ที่เกี่ยวข้อง   |   laploy.com  |  เกี่ยวกับผู้เขียน

 

คิวรีเมื่อทำ Index Seek ในดรรชนีแบบ CI

 

ต่อไปจะทดลองคิวรีที่ค้นข้อมูลเฉพาะเจาะจง ไม่ได้ไล่แสดงทุกแถวอย่างหัวข้อที่ผ่านมา คิวรีเป็นดังนี้

     SELECT SalesOrderID

     FROM Sales.SalesOrderDetail

     WHERE SalesOrderID = 55356

โปรดสังเกตว่าคอลัมน์ที่ฉายแสดงมีสามคอลัมน์เหมือนคิวรีในหัวข้อที่ผ่านมา คิวรีเหมือนเดิมแต่คราวนี้เพิ่มคำสั่ง WHERE เพื่อค้นข้อมูลเฉพาะเจาะจง แผนภูมิวิเคราะห์การปฏิบัติงานของคิวรีเป็นอย่างที่เห็นในภาพ 8-27

ภาพ 8-27 : แผนภูมิวิเคราะห์การปฏิบัติงานของคิวรีเมื่อทำ Index Seek ในดรรชนีแบบ CI

จะเห็นว่าการทำงานคราวนี้เป็น Clustered Index Seek ไม่ใช่ Clustered Index Scan อย่างในหัวข้อที่ผ่านมา ค่า EOC ที่ได้จะต่ำกว่ามาก คือเหลือเพียง 0.003285 ที่เป็นเช่นนั้นเพราะโปรแกรม SQL2008 จะท่องไปใน BTree เมื่อถึงระดับ LLN ก็พบข้อมูลที่ต้องการและจบการทำงานได้เนื่องจาก LLN ของ CI เก็บข้อมูลจริงๆ ไม่ได้เก็บพอยน์เตอร์

 

คิวรีเมื่อทำ Index Scan ในดรรชนีแบบ NCI

สองตัวอย่างที่ผ่านมาเป็นการทำงานโดยใช้ดรรชนีหมายเลข 1 ต่อไปท่านจะมาดูผลลัพธ์ของการทำงานเมื่อใช้ดรรชนีหมายเลข 2 ซึ่งเป็น NCI กันบ้าง คิวรีเป็นดังนี้

     SELECT ProductID

     FROM Sales.SalesOrderDetail

 

ภาพ 8-28 : แผนภูมิวิเคราะห์การปฏิบัติงานของคิวรีเมื่อทำ Index Scan ในดรรชนีแบบ NCI

จะเห็นว่าเนื่องจากผู้เขียนเลือกฉายคอลัมน์ ProductID เพียงคอลัมน์เดียว โปรแกรม SQL2008 จึงตัดสินใจใช้ดรรชนีดรรชนีหมายเลข 2 เพราะดรรชนีนี้ใช้คอลัมน์นี้เป็นกุญแจ โปรดสังเกตว่านี่คือการทำ Index Scan (ของ Non-Clustered)ผลลัพธ์ได้ค่า EOC ที่ถือว่าไม่เลวทีเดียวเมื่อเทียบกับหัวข้อ 8.23.1 และเมื่อคิดว่านี่คือการฉายแถวข้อมูลทั้งหมดแสนกว่าแถวโดยใช้ NCI

คิวรีเมื่อทำ Index Scan ในดรรชนีแบบ CI


Home Page  |   รายการบทความ   |   ลิงค์ที่เกี่ยวข้อง   |   laploy.com  |  เกี่ยวกับผู้เขียน

คิวรีเมื่อทำ Index Scan ในดรรชนีแบบ CI

 

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

SELECT SalesOrderID, SalesOrderDetailID, OrderQty

FROM Sales.SalesOrderDetail

โปรดสังเกตว่าคอลัมน์ที่ฉายมีสามคอลัมน์คือ SalesOrderID, SalesOrderDetailID, OrderQty วิธีตรวจสอบเพื่อวัดประสิทธิภาพของคิวรีให้ดำเนินการตามขั้นตอนดังนี้

  1. เปิดโปรแกรม SSMS
  2. เชื่อมต่อกับดาต้าเบสเซอฟเวอร์ที่มีฐานข้อมูล AdventureWorks
  3. คลิกที่ไอคอน AdventureWorks
  4. กดปุ่ม New Query บนแถบปุ่มมุมบนด้านซ้าย (อยู่ใต้เมนูของโปรแกรม SSMS)
  5. ป้อนพิมพ์คิวรีข้างบนลงใน QE ทางขวาของจอภาพ
  6. กดปุ่ม Display estimated execution plan เพื่อให้โปรแกรม SQL2008 แสดงแผนภูมิวิเคราะห์แผนการปฏิบัติงาน

 

 

    ภาพ 8-25 : ปุ่ม Display estimated execution plan

ในภาพ 8-26 จะเห็นว่าด้านบนคือคิวรี ด้านล่างคือแผนภูมิวิเคราะห์การปฏิบัติงานของคิวรี วิธีอ่านแผนภูมิให้อ่านจากขวาไปซ้าย ไอคอนแรกคือการทำ Index Scan มี cost หรือค่าใช้จ่ายในการทำงาน 100% ไอคอนทางซ้ายคือ SELECT มี cost 0% การคิด cost คิดจากการกินทรัพยากรของกระบวนการ ทรัพยากรในที่นี้คือทรัพยากรของระบบ เช่น I/O Cost คือการทำงานของอุปกรณ์ที่เชื่อมต่อกับฮาร์ดดิสก์ CPU Cost คือการประมวลผลของซีพียู cost

 

ภาพ 8-26 : แผนภูมิวิเคราะห์การปฏิบัติงานของคิวรีเมื่อทำ Index Scan ในดรรชนีแบบ CI

 

ในคิวรีนี้จะเห็นว่าการทำงานทั้งหมดอยู่ที่ Clustered Index Scan ให้เลื่อนเมาส์ไปทับบนไอคอน Clustered Index Scan โปรแกรม SQL2008 จะแสดงรายงานสรุปการทำงาน มีข้อมูลอยู่หลายบรรทัด แต่บรรทัดที่ท่านควรสนใจคือ Estimated Operator Cost (EOC) ซึ่งแสดงค่าการทำงานโดยรวมของกระบวนการทั้งหมด ค่านี้ยิ่งน้อยยิ่งดี คิวรีนี้ได้ EOC เท่ากับ 1.05006 ซึ่งถือว่าสูงมาก สาเหตุที่ค่า EOC สูงเพราะโปรแกรม SQL2008 จะต้องสแกนตารางทั้งหมดแสนกว่าแถว

โปรดสังเกตอีกอย่างหนึ่งว่าโปรแกรม SQL2008 วิเคราะห์คิวรีนี้แล้วพบว่าควรใช้ดรรชนีหมายเลข 1 ในการทำงานจะเหมาะสุด และโปรดสังเกตว่าดรรชนีหมายเลข 1 เป็นดรรชนีแบบ CI

 

วิธีตรวจสอบประสิทธิภาพดรรชนี


Home Page  |   รายการบทความ   |   ลิงค์ที่เกี่ยวข้อง   |   laploy.com  |  เกี่ยวกับผู้เขียน

วิธีตรวจสอบประสิทธิภาพดรรชนี

 

ต่อไปผู้เขียนจะสาธิตวิธีตรวจสอบเพื่อวัดประสิทธิภาพของดรรชนีด้วยคิวรีลักษณะต่างๆ ผู้เขียนจะเขียนคิวรีสั้นๆ และให้โปรแกรม SQL2008 วิเคราะห์แผนการปฏิบัติงาน (Execution Plan ย่อ EP) ของคิวรีแต่ละแบบในแต่ละสถานการณ์ และอธิบายว่าผลลัพธ์ที่ได้มีความแตกต่างกันอย่างไร และแตกต่างกันเพราะอะไร

ตารางที่ผู้เขียนจะสาธิตการตรวจสอบคือตาราง Sales.SalesOrderDetail อยู่ในฐานข้อมูล AdventureWorks ตารางนี้ทำหน้าที่เก็บรายละเอียดรายการในใบสั่งซื้อ มีข้อมูลทั้งสิ้น 121,317 แถวซึ่งถือว่าเป็นตารางขนาดไม่ใหญ่มากนัก ตารางนี้มีดรรชนีสามตัวดังนี้

  1. PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID: นี่คือดรรชนีหลัก (8.3.1) เป็นดรรชนีแบบ CI มีกุญแจเป็นคอลัมน์ SalesOrderDetailID ซึ่งเป็น PK ผสมกับคอลัมน์ SalesOrderID ซึ่งเป็น FK
  2. IX_SalesOrderDetail_ProductID: นี่คือดรรชนีนอก (8.3.2) เป็นดรรชนีแบบ NCI มีกุญแจเป็นคอลัมน์SalesOrderID ซึ่งเป็น FK

AK_SalesOrderDetail_rowguid: นี่คือดรรชนีเผื่อเลือก (8.3.3) เป็นดรรชนีแบบ NCI มีกุญแจเป็นคอลัมน์ rowguid ซึ่งเป็นคอลัมน์ที่มีข้อมูลไม่ซ้ำกันเลย (Unique Key)

ตาราง Sales.SalesOrderDetail อยู่ในฐานข้อมูล AdventureWorks

 

เฉลยคำถามท้ายบท [5]


Home Page  |   รายการบทความ   |   ลิงค์ที่เกี่ยวข้อง   |   laploy.com  |  เกี่ยวกับผู้เขียน

 

เฉลยคำถามท้ายบท [5]

บทที่ 22

1. คำว่า Store Procedure เขียนและอ่านโดยย่อว่าอย่างไร

เขียนย่อว่า SProc อ่านว่า "สพร็อกซ์"

2. สพร็อกซ์คืออะไร

คิวรีที่เก็บไว้ในฐานข้อมูลเพื่อให้เรียกใช้งานได้ตลอดเวลา

3. SSMS คืออะไร

โปรแกรม Microsoft SQL Server Management Studio

4. SSMS ปรกติจะถูกติดตั้งไว้ในโฟลเดอร์ใด

C:\Program Files\ Microsoft SQL Server\ 100\ Tools\ Binn\ VSShell\ Common7\ IDE\

5. Windows Authentication คืออะไร

ระบบกำหนดสิทธิของวินโดวส์เพื่อลงชื่อเข้าใช้งาน

6. AdventureWorks คืออะไร

ชื่อบริษัทสมมุติเป็นฐานข้อมูลตัวอย่างที่ไมโครซอฟต์จัดมาให้

7. ไอคอน Programmability คืออะไร

เป็นไอคอนในหน้าจอ Object Explorer ของ SSMS มีหน้าที่เก็บรายการสิ่งต่างๆ ที่เกี่ยวข้องกับการสร้างโปรแกรม

8. โปรแกรม SSMS จะบันทึกคิวรีใหม่ไว้เป็นแฟ้มชั่วคราวที่โฟลเดอร์ใด

C:\Documents and Settings\user\Local Settings\Temp

9. ปุ่มที่มีรูปเครื่องหมายตกใจสีแดงทำหน้าที่อะไร

รันคิวรี

10. หากไม่บันทึกแฟ้มคำสั่งสร้างสพร็อกซ์นี้ไว้ในฮาร์ดดิสก์จะเป็นอย่างไร

ไม่เป็นอย่างไร ถึงไม่ได้บันทึกไว้ สพร็อกซ์ที่ถูกสร้างขึ้นแล้วก็จะยังอยู่ในฐานข้อมูลไม่ได้หายไปไหน

11. จะเรียนใช้สพร็อกซ์ได้จากที่ใด

สามารถเรียกใช้สพร็อกซ์ที่สร้างไว้จากคิวรีใดๆ ก็ได้

12. คำสั่ง use ใช้ทำอะไร

ทำหน้าที่ระบุฐานข้อมูลที่ท่านต้องการติดต่อ

13. ใช้วิธีการใดแทนคำสั่ง USE ได้

ใช้วิธีระบุเส้นทางเต็มหรือชื่อเต็ม (fully qualified name)

14. อะไรคือ MSVC#

Microsoft Visual C# 2008 Express Edition (หรือเวอร์ชันอื่นๆ)

15. DataGridView คืออะไร

คอนโทร์ลในวินฟอร์มทำหน้าที่แสดงข้อมูลจากฐานข้อมูล

16. พารามิเตอร์มีประโยชน์อย่างไร

ทำให้กำหนดลักษณะของผลลัพธ์ได้ เพราะการรันสพร็อกซ์แต่ละครั้งจะได้ผลลัพธ์แตกต่างกันไป ขึ้นอยู่กับข้อมูลที่ส่งไปเป็นพารามิเตอร์

 

บทที่ 23

1. Loose Coupling คืออะไร

ระบบงานสองระบบที่เป็นอิสระต่อกัน แต่มีความสัมพันธ์ต่อกันอย่างหลวมๆ

2. hard code คืออะไร

การอ้างถึงชื่อตาราง คอลัมน์ และออพเจ็กต์ดาต้าเบสอื่นๆ ในโค้ดโดยตรง

3. hard code มีข้อเสียอย่างไร

หากมีการเปลี่ยนแปลงโครงสร้างของดาต้าเบส ผลกระทบจะลามไปทั่วโปรแกรม

4. สพร็อกซ์มีความชื่อถือได้เพราะอะไร

เพราะปรกติคนสร้างสพร็อกซ์จะเป็นเจ้าหน้าที่ผู้ชำนาญฐานข้อมูล

5. สพร็อกซ์ปรับแต่งง่ายเพราะอะไร

เพราะคิวรีทั้งหลายรวมอยู่ในที่เดียวกันภายในฐานข้อมูล

6. การตั้งชื่อสพร็อกซ์ควรทำอย่างไร

ควรใช้วิธีเขียนแบบปาสคาล

7. การแก้ไขสพร็อกซ์ทำได้โดยใช้คำสั่งอะไร

ALTER PROC

8. การ CREATE และ DROP สพร็อกส์ต่างจากการใช้คำสั่ง ALTER PROC อย่างไร

การ CREATE และ DROP จะทำให้สถานะสิทธิและความสัมพันธ์กับออพเจ็กต์อื่นของสพร็อกซ์หายไป ขณะที่การแก้ไขสพร็อกซ์ด้วยคำสั่ง ALTER PROC ความสัมพันธ์ต่างๆ จะยังคงอยู่

9. พารามิเตอร์ของสพร็อกซ์คืออะไร

เหมือนพารามิเตอร์ของฟังก์ชัน คือทำหน้าที่ให้สพร็อกซ์สามารถรับ-ส่งข้อมูลกับโปรแกรมหรือคิวรีที่เรียกใช้งานมันได้

10. อินพุตพารามิเตอร์มีประโยชน์อย่างไร

ทำให้สพร็อกซ์มีประโยชน์มากขึ้น เพราะใช้เปลี่ยนแปลงเงื่อนไขของข้อมูลที่ต้องหรือเปลี่ยนแปลงคิวรีในลักษณะต่างๆ ได้

11. เอาท์พุตพารามิเตอร์มีประโยชน์อย่างไร

ช่วยให้สร้างสพร็อกซ์ที่คืนค่ามาเป็นค่าที่ไม่ใช่เรคคอร์ดเซตได้ เช่นเป็นค่าบูลีน หรือสเกลาร์ที่เป็นผลลัพธ์จากการคำนวณ

12. หากต้องการให้สพร็อกซ์คืนค่าผลลัพธ์ที่เป็นสองค่าหรือมากกว่าจะทำได้อย่างไร

ใช้อินพุตพารามิเตอร์หลายๆ ตัว

13. คำสั่ง RETURN ใช้ทำอะไร

เพื่อบังคับให้สพร็อกซ์จบการทำงานและส่งค่ากลับเพื่อยืนยันความสำเร็จของการทำงานของสพร็อกซ์

14. ตัวแปร @@ERROR ทำหน้าที่อะไร

ทำหน้าที่เก็บข้อมูลสถานะความผิดพลาดที่เกิดขึ้นในการทำคิวรี

15. พบความผิดพลาด SQL2008 จะทำอย่างไร

แสดงข้อความแจ้งสิ่งผิดพลาดแล้วทำงานคำสั่งบรรทัดที่เหลือต่อไป

 

บทที่ 24

1. UDF คืออะไร

User-Defined Function ฟังก์ชันที่ผู้ใช้นิยามเอง

2. BF คืออะไร

Build-in Function ฟังก์ชันฝังตัวเป็นฟังก์ชันที่มีอยู่ภายใน SQL2008

3. RS คืออะไร

Row Set แถวข้อมูลผลลัพธ์ที่ได้จากคิวรี

4. การนิยาม UDF ทำได้โดยใช้ภาษาอะไร

ภาษา T-SQL และภาษา CLR เช่น C# และ VB.NET

5. การใช้ UDF ช่วยให้คิวรีทำงานได้เร็วขึ้นเพราะอะไร

เพราะ SQL2008 สามารถทำแคชและวางแผนการทำออพติไมซ์ต่อ UDF ล่วงหน้าได้ ไม่ต้องทำแคชและออพติไมซ์ทุกครั้งที่เรียกใช้งาน

6. UDF จะมีคำสั่งแบบใดไม่ได้

คำสั่งแบบ DML คือ INSERT, UPDATE และ DELETE

7. DF และ NDF คืออะไร

Deterministic Function ฟังก์ชันแบบคืนค่าตายตัว Non-Deterministic Function ฟังก์ชันแบบคืนค่าไม่ตายตัว

8. UDF จะต้องคืนค่าเป็นอะไร

เป็นสเกลลาร์หรือตาราง

9. เมื่อเกิดเออเรอร์ UDF จะทำอะไร

จะหยุดการทำงาน

10. UDF ทำคำสั่ง DML ได้กับอะไร

ทำได้กับตารางเทียม

11. SF คืออะไร

Scalar Functions ฟังก์ชันแบบสเกลาร์

12. การตั้งชื่อฟังก์ชันควรใช้แบบใด

แบบคาเมลโนเตชัน

13. การหาค่ายกกำลังสองใช้ฟังก์ชันอะไร

POWER

14. คำสั่ง RETURN ทำหน้าที่อะไร

ส่งผลลัพธ์ของการคำนวณกลับไปให้ผู้เรียกใช้

15. UDF ถูกเก็บไว้ที่ใด

ภายใต้หัวข้อ Programmability / Functions / Scalar-valued Functions

16. พารามิเตอร์ของ UDF แตกต่างจาก Sproc อย่างไร

หาก Sproc ไม่ต้องการพารามิเตอร์ท่านไม่ต้องใส่วงเล็บไว้ในทั้งในนิยามและเมื่อเรียกใช้ ส่วน UDF แม้ไม่ต้องการพารามิเตอร์ก็ต้องใส่วงเล็บว่างๆ ไว้ทั้งในนิยามและตอนเรียกใช้ด้วย

17. ฟังก์ขันแฟกทอเรียลคืออะไร

คือฟังก์ชันที่ให้ผลคูณของสมาชิกทั้งหมดที่น้อยกว่าหรือเท่ากับ n เมื่อ n มากกว่าศูนย์

18. SQL2008 จำกัดการรีเคอร์ซีฟของ UDF ไว้เท่าใด

32 ระดับ

19. SQL2008 จำกัดการรีเคอร์ซีฟของ CTE ไว้เท่าใด

100 ระดับ

20. TVF คืออะไร

Table-Valued Function ฟังก์ชันที่ให้ค่าเป็นตาราง

21. ตัวแปรท้องถิ่นของฟังก์ชันมี scope อย่างไร

มีชีวิตอยู่เพียงแค่ภายในฟังก์ชันนี้เท่านั้น

22. คำสั่ง CROSS APPLY ใช้ทำอะไร

มีไว้เพื่อให้จอยตารางจริงกับ TVF ได้

23. ITVF คือะไร

Inline Table-Valued Function เป็น UDF ซึ่งทำหน้าที่เหมือนวิวแบบมีพารามิเตอร์

24. เมื่อนิยาม UDF ด้วยภาษา C# จะสามารถสร้าง UDF ได้กี่แบบ

สี่แบบ คือ สเกลาร์, TVF, ITVF และแอกริเกต

 

บทที่ 25

1. รายงานแบบ tabular คืออะไร

คือรายงานที่แสดงเป็นตารางมีคอลัมน์และแถวเหมือนข้อมูลที่ได้จากการคิวรี

2. นอกจากรายงานแบบ tabular แล้ว SSRS ยังสามารถสร้างรายงานแบบใดได้อีก

รายงานแบบ Matrix ซึ่งจะมีลักษณะคล้าย Pivot table ในโปรแกรม Excel และ List ที่ใช้เพื่อแสดงรายละเอียดของข้อมูลหนึ่งชิ้น

3. FULL JOIN ทำงานอย่างไร

นำข้อมูลจากสองตารางมาจอยกันโดยเอาทั้งแถวที่สัมพันธ์กันและไม่สัมพันธ์กัน

4. โซลูชัน (solution) คืออะไร

ที่เก็บโครงการระดับสูงสุด

5. Project types สำหรับการสร้างรายงาน SSRS คืออะไร

Business Intelligence Projects

6. วิธีตรวจสอบว่าขณะนี้โปรเจ็กต์มีข้อมูล ไฟล์ หรือออพเจ็กต์อะไรบ้างทำได้อย่งไร

ทำได้โดยเปิดดูในโซลูชันเอ็กซ์พลอเรอร์ (Solution Explorer ย่อ SE) โดยการกดปุ่ม Ctrl+Alt+L

7. RDF คืออะไร

Report Definition File ไฟล์สำหรับเก็บนิยามรายงาน

8. DS คืออะไรใช้ทำอะไร

Data Source ดาต้าซอร์ส ทำหน้าที่เป็นตัวเชื่อมต่อกับดาต้าเบสเซอฟเวอร์ โดยเก็บข้อกำหนดว่าดาต้าเบสเซอร์เวอร์ชื่ออะไรอยู่ที่ไหน มีชื่อและรหัสผ่านอะไร

9. DTS คืออะไรใช้ทำอะไร

Data Set ดาต้าเซต หน้าที่กำหนดคิวรีที่จะใช้กระทำกับฐานข้อมูล

10. DR คืออะไร

Data Region ดาต้ารีเจียน เป็นองค์ประกอบของรายงานทำหน้าที่กำหนดขอบเขตการแสดงข้อมูล

11. Tablix คืออะไร

ย่อจาก Table + Matrix เป็นคำเรียกรวมๆ ของ Table, Matrix, Chart และ List

12. Preview คืออะไร

คือการสร้างหรือเรนเดอร์ (render) รายงานแบบด่วน โดยไม่ส่งผลลัพธ์ขั้นสุดท้ายออกไปที่เซอฟเวอร์ หรือที่เรียกว่าการทำดีพลอย (deploy) แต่จะเพียงแสดงให้ดูภายในโปรแกรม MSVS2008

 

บทที่ 26

1. BI คืออะไร

บิสิเนสอินเทลิเจนส์ (Business intelligence ย่อ BI) หมายถึงเทคโนโลยีหรือโปรแกรมประยุกต์หรือวิธีปฏิบัติเพื่อการรวบรวม วิเคราะห์ และนำเสนอสารสนเทศทางธุรกิจโดยมีจุดมุ่งหมายเพื่อให้การทำธุรกิจมีประสิทธิภาพสูงขึ้น เป็นเครื่องมือให้ผู้บริหารใช้ช่วยในการตัดสินใจ

2. Server Farm คืออะไร

การนำคอมพิวเตอร์ซึ่งทำหน้าที่เป็นผู้ให้บริการหรือเซอฟเวอร์มาต่อเชื่อมกันเป็นจำนวนมาก

3. Crystal Report คืออะไร

เป็นโปรแกรมประยุกต์แบบ BI จากบริษัท Business Object

4. ใน SQL2008 มีส่วนที่เกี่ยวข้องกับ BI โดยตรงกี่ส่วน อะไรบ้าง

Integration services (SSIS) ทำหน้าที่รวบรวมข้อมูลจากหลายๆ แหล่งเพื่อนำมาสังเคราะห์ให้อยู่ในรูปแบบที่นำไปใช้ได้อย่างมีประสิทธิภาพ , Analysis services (SSAS) ใช้สร้าโมเดลสำหรับการวิเคราะห์ข้อมูลเช่น Cube และ Subspace และ Reporting services (SSRS) ใช้สร้างรายงานแบบ OLAP

5. รายงานแบบ OLAP คืออะไร

คือการวิเคราะห์ข้อมูลแบบออนไลน์ (Online Analytical Processing) ไม่ใช่แค่รายงานตายตัวแบบในกระดาษ แต่เป็นรายงานที่มีพลวัตและมีหลายมิติ

6. OLTP คืออะไร

การทำธุรกรรมออนไลน์ (Online Transaction Processing)

7. ฐานข้อมูล OLAP ต่างจาก OLTP หรือไม่อย่างไร

ฐานข้อมูลของงาน OLTP จะมีขนาดเล็กกว่าและมีพลวัตสูง ส่วนฐานข้อมูลของ OLAP จะมีขนาดใหญ่กว่ามากและมีพลวัตต่ำหรือถึงกับไม่มีเลย

8. SSRS มีสถาปัตยกรรมแบบใด

multi-tier

9. อะไรคือ presentation tier ของ SSRS

เว็บเบราว์เซอร์ หรือแอพลิเกชันที่ท่านพัฒนาเองและโปรแกรมจากผู้พัฒนารายที่สาม

10. SSIS คืออะไร

คือ Integration services

ทำหน้าที่รวบรวมข้อมูลจากหลายๆ แหล่งเพื่อนำมาสังเคราะห์ให้อยู่ในรูปแบบที่นำไปใช้ได้อย่างมีประสิทธิภาพ

11. SSAS คืออะไร

Analysis services ใช้สร้าโมเดลสำหรับการวิเคราะห์ข้อมูลเช่น Cube และ Subspace

12. RDL คืออะไร

Report Definition Language คือภาษาเพื่อการนิยามรายงาน เป็นภาษาแบบ XML ที่ไมโครซอฟต์สร้างขึ้นเพื่อใช้กับ SSRS โดยเฉพาะ ไม่ใช่ภาษาโปรแกรมมิ่งอย่างภาษา C# แต่เป็นภาษาที่เน้นการใช้แท็ก (tag) เพื่อการพรรนนาการจัดหน้ารายงาน

13. วิธีสร้างและแก้ไข RDL ทำได้อย่างไร

ใช้ NotePad ก็ได้ แต่ถ้าจะให้ดีควรใช้ MSVS2008 เพราะสะดวกกว่ามาก

14. ในการใช้งานจริง (production environment) ของ SSRS ควรใช้คอมพิวเตอร์อย่างน้อยกี่เครื่อง

สี่

15. การ Build รายงานคืออะไร

การคอมไพล์และการสร้างแอสเซมบลีที่ทำให้รายงานอยู่ในสภาพที่เปิดดูได้

16. ดีพลอยคืออะไร

การโยกย้ายไฟล์ผลลัพธ์ไปใส่ไว้ใน VD ของรายงาน

17. Credential คืออะไร

การกำหนดชื่อและรหัสผ่านในระบบรักษาความปลอดภัย

18. on-demand report คืออะไร

การสร้างรายงานสดเมื่อผู้ใช้เรียกดู

19. Sanpshot คืออะไร

การสร้างรายงานโดยเรนเดอร์เป็น HTML เก็บไว้แสดงเมื่อผู้ใช้เรียกดูรายงานได้โดยไม่ต้องรันคิวรีและเรนเดอร์รายงานอีก

20. แคชและ Snapshot แตกต่างกันหรือไม่อย่างไร

แตกต่างกัน เมื่อแคชหมดอายุแล้ว SSRS จะสร้างแคชใหม่ก็ต่อเมื่อมีผู้เรียกใช้ ส่วน Snapshot จะถูกสร้างใหม่โดยอัตโนมัติตามเวลาที่กำหนดไว้แม้จะไม่มีผู้ใช้งาน

 

บทที่ 27

1. RDG คืออะไร

Report Data Group การจัดกลุ่มของข้อมูลในรายงาน

2. การสร้าง RDG คืออะไร

คือการกำหนดวิธีผูกโยงกลุ่มของข้อมูลระหว่าง DR กับ DTS

3. การทำ RDG ซ้อนกันคืออะไร

คือการแบ่งหมวดหมู่ย่อย โดย RDG แต่จะชั้นจะจัดกลุ่มข้อมูลในรายงานหนึ่งช่วง

4. RGP คืออะไร

Row Group Pane คือที่เก็บกลุ่มแถว

5. CGP คืออะไร

Column Group Pane คือที่เก็บกลุ่มคอลัมน์

6. GH คืออะไร

Group Hierarchy กรุ๊พไฮราคี คือลำดับชั้นของกลุ่ม

7. PG คืออะไร

Parent Group กลุ่มแม่ คือกลุ่มบนสุดของ RGP

8. CG คืออะไร

Child Group กลุ่มลูก คือกลุ่มที่อยู่ใต้ PG

9. Tablix แบบมีข้อมูลวิ่งทั้งสองแกนมีอะไรบ้าง

เช่น เมทริกซ์ (Matrix) หรือชาร์ท (Chart)

10. DD คืออะไร

Drill Down รายงานที่ยืดหดได้

11. การกำหนดค่าโดยปริยายของพารามิเตอร์มีประโยชน์อย่างไร

เมื่อผู้ใช้เปิดดูรายงาน SSRS จะเรนเดอร์รายงานโดยใช้ค่าโดยปริยายทันที หากไม่ได้กำหนดค่าโดยปริยายเมื่อผู้ใช้เปิดดูรายงานจะพบรายงานที่ว่างเปล่า ผู้ใช้ต้องป้อนค่าให้แก่พารามิเตอร์แล้วกดปุ่ม View Report ก่อน SSRS จึงจะสามารถเรนเดอร์รายงานได้

12. DF คืออะไร

Data Filtering ตัวกรองข้อมูล ใช้คัดกรองแถวบรรทัดที่ไม่ต้องการออกให้เหลือเฉพาะข้อมูลที่ต้องการนำเสนอ

13. DM คืออะไร

Document Map แผนที่ของเอกสาร มีลักษณะเหมือนสารบัญ เป็นเครื่องช่วยให้ผู้ใช้สามารถท่องไปในรายงานได้ง่าย

14. DT คืออะไร

Drill Through รายงานแบบ เชื่อมโยง คือรายงานที่ท่านกำหนดให้บางคอลัมน์เป็นตัวเชื่อมโยงไปยังรายงานอื่น เช่นรายงานแม่มีจุดเชื่อมโยง (Hyper link ไฮเปอร์ลิงค์) ไปยังรายงานลูก

15. คำสั่ง Immediate IF มีวากยสัมพันธ์อย่างไร

Iif(นิพจน์เงื่อนไข, นิพจน์1, นิพจน์2)

16. RP คืออะไร

Report Processor ตัวประมวลผลรายงาน

17. BIC คืออะไร

Built-in Collection หรือ Build-in Fields คอลเลคชันภายใน

18. ACG คืออะไร

Adjacent Column Group กลุ่มแบบคอลัมน์ข้างเคียง

19. ริกซ์ คิวรีของแผนภูมิควรจะเน้นอะไร

เน้นข้อมูลแบบแอกริเกตซึ่งเป็นข้อมูลสรุป ไม่ใช่คิวรีที่ให้ข้อมูลรายละเอียด

20. SDS คืออะไร

Shared Data Sources แชร์ดาต้าซอร์ส คือการสร้าง DS อันเดียวแล้วใช้ร่วมกันจากทุกๆ รายงาน

21. Custom Code คืออะไร

คือการเขียนโค้ดฝังไว้ภายในไฟล์รายงาน แต่มีข้อจำกัดว่าต้องเขียนด้วยภาษา VB.NET เท่านั้น วิธีนี้เหมาะกับโค้ดที่ใช้เฉพาะในรายงานหนึ่งๆ

22. Custom Assembly คืออะไร

คือการโค้ดเขียนด้วยภาษา C# (หรือภาษาอะไรก็ได้ที่เป็น CLR) เป็นการเขียนโค้ดไว้ภายนอก (ต้องทำเป็นไฟล์ .dll แบบดอตเน็ตแอสเซมบลี ไม่ใช่ .dll ที่เป็น COM/COM+ แบบใน Win32API) วิธีนี้เหมาะกับโค้ดที่ใช้ได้กับรายงานหลายๆ ตัว

23. การทำ Deployment ตัว CA ทำได้อย่างไร

ทำได้โดยคัดลอกไฟล์ CA ไปใส่ในโฟลเดอร์ที่กำหนด โฟลเดอร์นี้เป็นโฟลเดอร์ที่เก็บโปรแกรม SSRS หากท่านยอมรับค่าปริยายเมื่อติดตั้ง โฟลเดอร์นี้คือ C:\Program Files\ Microsoft SQL Server2008\ MSRS10.LOYSQL2008\ Reporting Services\ ReportServer\ bin

 

บทที่ 28

1. ภาษาอะไรที่ไมโครซอฟท์สร้างขึ้นเพื่อ .NET โดยตรง

C# เปรียบเหมือนภาษาพื้นเมือง (native language) ของ .NET

2. ความแตกต่างสำคัญระหว่าง Java Platform กับ .NET Framework คืออะไร

ใน .NET มีภาษาให้เลือกใช้มากกว่า 30 ภาษา ขณะที่ Java platform มีภาษาให้เลือกใช้เพียงเพียงภาษาเดียว (ภาษา Java)

3. assembly คืออะไร

assembly หมายถึงไฟล์ทั้งหมดใน project (ทั้งโค้ดและข้อมูล) ถูกคอมไพล์อัดรวมอยู่เป็นไฟล์เพียงไฟล์เดียว

4. assembly จะบรรจุโค้ดภาษาอะไร

MSIL

5. MSIL คืออะไร

Microsoft Immediate language หรือ MSIL คือภาษาระดับกลางที่ไมโครซอฟต์สร้างขึ้นเพื่อใช้ใน .NET Framework คล้ายไบต์โค้ดของจาวา

6. garbage collector คืออะไร

กลไกของ .NET Framework ตัวหนึ่งหน้าที่ “เวนคืน” พื้นของหน่วยความจำบริเวณนั้น ทำให้หน่วยความจำเป็นอิสระเพื่อให้ CLR นำไปใช้จัดสรรให้ออพเจ็กต์อื่นๆ ที่ถูกสร้างขึ้นใหม่ต่อไป

7. JIT คืออะไร

Just In Time compiler เป็นโปรแกรมทำหน้าที่แปลภาษา MSIL ให้เป็นภาษาเครื่อง

8. CAS คืออะไร

Code Access Security รักษาความปลอดภัย CLRR เพื่อกำหนดว่ารูทีนใดมีสิทธิเข้าถึงส่วนใดของฐานข้อมูลได้บ้าง

9. ควรใช้ CLRR เมื่อใด

เมื่อต้องการเขียนโปรแกรมคำนวณหรือตัดสินใจในตรรกะที่ซับซ้อน หรือง่านอื่นๆ ที่ทำด้วยภาษา T-SQL ไม่ได้ หรือทำได้ยาก

10. คอมโพเนนท์ทั้งหมดที่จำเป็นต้องใช้สร้าง CLRR อยู่ที่ใดชื่ออะไร

อยู่ในเบสคลาสของ .NET Framework ชื่อแอสเซมบลีคือ system.data.dll ซึ่งอยู่ใน GAC (Global Assembly Cache) และอยู่ในโฟลเดอร์ <windir> \ Microsoft.NET \ Framework \ <version>

11. CLRR คืออะไร

Common Language Runtime Routine โปรแกรมที่สร้างด้วยภาษา C# เพื่อใช้งานใน SQL2008

12. ฟังก์ชัน T-SQL ที่ให้ค่าเดี่ยวเทียบได้กับ CLRR แบบใด

เมธอดแบบ public static

13. ฟังก์ชัน T-SQL ที่ให้ค่าเป็นตารางเทียบได้กับ CLRR แบบใด

เมธอดแบบ public static

14. ไทป์ที่ผู้ใช้นิยามเองใน SQL2008 เทียบได้กับ CLRR แบบใด

คลาสหรือ structure

15. เมื่อสร้าง CLRR แบบสพร็อกซ์แล้วก่อนจะนำไปใช้งานได้ท่านจะต้องทำอย่างไร

ลงทะเบียนมันภายใน SQL2008

16. ตัวแปลภาษา C# และ VB.NET ของ SQL2008 อยู่ที่ใด

อยู่ในเส้นทางโฟลเดอร์ C:\<windir>\Microsoft.NET\Framework\<version>

17. ท่านต้องทำอะไรเพื่อให้วินโดวส์หาตัวแปลภาษาเจอเมื่อท่านทำงานอยู่ในโฟลเดอร์อื่น

ต้องใส่ตำแหน่งที่อยู่ของตัวแปลภาษาไว้ในรายการ “ตัวแปรระบบที่ระบุสภาพแวดล้อม” (Environment System Variable ย่อ ESV)

 

บทที่ 29

1. UDA คืออะไร

User Defined Aggregate ฟังก์ชันแบบเอกริเกตที่ผู้ใช้นิยามขึ้นเอง

2. CRC คืออะไร

CLR Related Command คำสั่งที่เกี่ยวข้องกับ CLR

3. NFA คืออะไร

.NET Framework Assembly ดอตเน็ตเฟรมเวิร์คแอสเซมบลี

4. คำสั่งเกี่ยวกับการลงทะเบียน CLRR ทำหน้าที่อะไร

ช่วยให้ท่านนำ NFA มาสร้างเป็นออพเจ็กต์ในฐานข้อมูลภายใน SQL2008 ได้

5. คำสั่งเกี่ยวกับ UDA ทำหน้าที่อะไร

ช่วยให้สามารถสร้างและลบฟังก์ชันแบบเอกริเกตที่ผู้ใช้นิยามขึ้นเองได้โดยนิยาม UDA ด้วยภาษา C# (หรือภาษา .NET อื่นๆ เช่น VB.NET) เป็นคลาสไว้ใน NFA

6. คำสั่งเกี่ยวกับ UDT ทำหน้าที่อะไร

ช่วยให้ผู้ใช้สร้างชนิดข้อมูลขึ้นเองได้ ทำได้โดยนิยามคลาสหรือ Struct ด้วยภาษา C# (หรือภาษา .NET อื่นๆ เช่น VB.NET) ไว้ใน NFA

7. เมตาดาต้าที่เกี่ยวข้องกับ CLRR ของโปรแกรม SQL2008 อยู่ที่ใด

อยู่ในแคตาล็อกวิวชื่อ sys.all_objects

 

บทที่ 30

1. ฟังก์ชันสตริงคืออะไร

คือฟังก์ชันเพื่อจัดการหรือประมวลผลข้อความตัวอักษร โดยข้อมูลที่ป้อนให้จะเป็นสายอักขระ (สตริง) หรือตัวอักษรตัวเดียวก็ได้ ส่วนผลลัพธ์ที่ฟังก์ชันคืนค่ามาอาจเป็นตัวเลขหรือตัวอักษรก็ได้

2. ฟังก์ชัน CHAR ทำหน้าที่อะไร

แปลงเลขจำนวนเต็มเป็นตัวอักษรตามรหัสแอสกี

3. ฟังก์ชัน LEFT ทำหน้าที่อะไร

คืนค่าเป็นตัวอักษรทางซ้ายของนิพจน์ตัวอักษรที่ต้องการหาค่าตามจำนวนที่กำหนดโดยเลขจำนวนเต็มบวกทำหน้าที่กำหนดจำนวนตัวอักษร

4. nondeterministic function คืออะไร

ฟังก์ชันที่คืนค่าแบบไม่คงที่ คือฟังก์ชันที่อาจคืนค่ามาแตกต่างกันในแต่ละครั้งแม้จะได้รับข้อมูลป้อนให้เป็นชุดเดิม

5. ฟังก์ชันในกลุ่ม rowset คืออะไร

ฟังก์ชันที่คืนค่ามาเป็นออพเจ็กต์ที่มีลักษณะเหมือนตาราง ท่านสามารถนำออพเจ็กต์นี้ไปใช้ในนิพจน์หรือประโยคคำสั่ง T-SQL ที่ต้องการค่าเป็นตารางได้

6. หากต้องการดึงข้อมูลจากเซอฟเวอร์ออราเคิล โดยอาศัย Microsoft OLE DB Provider for Oracle จะต้องใช้ฟังก์ชันอะไร

ฟังก์ชัน OPENQUERY ทำหน้าที่เปิดการเชื่อมต่อเฉพาะกิจกับฐานข้อมูลที่ไม่ใช่ SQL2008

7. อ่านข้อมูลจากเอกสารแบบ XML จะต้องใช้ฟังก์ชันอะไร

ฟังก์ชัน OPENXML

8. ฟังก์ชันเอกกริเกตคืออะไร

ฟังก์ชันหาผลรวมทำหน้าที่คำนวณชุดข้อมูลแล้วให้ผลลัพธ์เป็นค่าๆ เดียว

9. จะใช้ฟังก์ชันในกลุ่มเอกกริเกตได้กับอะไรบ้าง

รายการในอนุประโยค SELECT (ได้ทั้งคิวรีหลักและย่อย) อนุประโยค COMPUTE หรือ COMPUTE BY อนุประโยค HAVING

10. ฟังก์ชัน COUNT_BIG ทำหน้าที่อะไร

ทำหน้าที่นับจำนวนข้อมูลในกลุ่ม หากในกลุ่มมีข้อมูลที่เป็น NULL ก็จะถูกนับด้วย ฟังก์ชัน COUNT_BIG เหมือนฟังก์ชัน COUNT ทุกอย่าง ยกเว้นค่าส่งกลับ

11. ฟังก์ชัน GROUPING ทำหน้าที่อะไร

ให้ค่า 1 หากมีแถวจาก CUBE หรือ ROLLUP และให้ค่าเป็นศูนย์หากไม่ใช่ ฟังก์ชัน GROUPING จะใช้ร่วมกับอนุประโยค GROUP BY ที่มีตัวกระทำ CUBE หรือ ROLLUP ร่วมด้วยเท่านั้น

12. ฟังก์ชัน MIN ทำหน้าที่อะไร

ทำหน้าที่หาค่าต่ำสุดของค่าในกลุ่มโดยไม่สนใจค่า NULL ถ้านำไปใช้กับข้อมูลตัวอักษรจะนับตามลำดับตัวอักษร (เช่น a ต่ำกว่า b)

 

บทที่ 31

1. ADO.NET คืออะไร

เป็นสิ่งที่ทำให้ภาษา C# ทำงานร่วมกับ SQL2008 ได้ ADO.NET เป็นส่วนหนึ่งของดอตเน็ตเฟรมเวิร์ค

2. System.Data.SqlTypes คืออะไร

คือเนมสเปสบรรจุนิยามไทป์ หรือชนิดข้อมูลต่างๆ ที่สัมพันธ์กันระหว่า SQL2008 กับภาษา C#

3. SqlDataReader คืออะไร

คือคลาสในเนมสเปส SqlClient ใช้สร้างออพเจ็กต์ซึ่งทำหน้าที่อ่านแถวข้อมูลแบบเดินหน้าได้ทางเดียว

4. การประกาศตัวแปรออพเจ็กต์โดยกำหนดค่าเริ่มต้นเป็น null มีผลอย่างไร

ทำให้ไม่มีออพเจ็กต์เกิดขึ้นจริงๆ เป็นเพียงแต่ตัวแปรที่มีชนิดข้อมูลตามระบุ

5. เมธอด Close ของออพเจ็กต์ connect ทำหน้าที่อะไร

ปิดการเชื่อมต่อกับ SQL2008

6. วิธีป้องกันไม่ให้การเชื่อมต่อกับฐานข้อมูลที่เปิดไว้ไม่ถูกปิดเมื่อเกิด error ทำอย่างไร

วิธีแก้ไขทำได้สองวิธี วิธีที่แรกคือสร้างและใช้งาน SqlConnection ภายในบล็อกคำสั่ง using อีกวิธีหนึ่งคือใช้คำสั่ง try เพื่อดักจับความผิดพลาด

7. LINQ คืออะไร

Language Interacted Query ภาษาคิวรีแบบบูรณาการ เป็นเทคโนโลยีที่บริษัทไมโครซอฟต์นำมาผนวกไว้ในวิสชวลสตูดิโอและดอตเน็ตเฟรมเวิร์คเพื่อให้สามารถเขียนคิวรีภายในภาษา C# (หรือภาษา CLR อื่นๆ) ได้โดยตรง

8. LINQ เริ่มมีใช้เมื่อใด

เริ่มออกให้ใช้เมื่อปลายปี ค.ศ. 2007 โดยผนวกไว้กับดอตเน็ตเฟรมเวิร์คเวอร์ชัน 3.5 และวิสชวลสตูดิโอ 2008

9. OODM คืออะไร

Object Oriented Database Model เป็นการผนวกข้อมูลและส่วนโค้ดที่จัดการมันไว้เป็นก้อนเดียวกัน ช่วยให้นักเขียนโค้ดจัดการฐานข้อมูลได้เหมือนเป็นออพเจ็กต์หนึ่ง

10. จุดมุ่งหมายที่ไมโครซอฟต์ประดิษฐ์ LINQ คืออะไร

ต้องการเปิดโอกาสให้นักพัฒนาสามารถใช้หลักการ OOP (Object Oriented Programming การเขียนโปรแกรมแบบวัตถุวิธี) กับการพัฒนาแอพลิเกชันฐานข้อมูลได้อย่างสมบูรณ์ ซึ่งทำไม่ได้ในโมเดลการเขียนโปรแกรมแบบอื่นๆ ก่อนหน้านี้ (เช่น ADO.NET)

11. O/RM คืออะไร

การจับคู่ระหว่างออพเจ็กต์กับความสัมพันธ์ แบบจำลองการเชื่อมระหว่าง LINQ กับ SQL

12. การสร้าง O/RM ทำได้อย่างไร

ใช้เท็มเพลตชื่อ LINQ to SQL Classes พบได้ในวิสชวลสตูดิโอ 2008 หรือเวอร์ชันใหม่กว่า

13. ก่อนจะทำ O/RM ได้จะต้องทำอะไรก่อน

ต้องกำหนดการเชื่อมต่อกับดาต้าเบสเซอฟเวอร์ที่จะใช้เสียก่อน

14. ITVD คืออะไร

Implicit Typing Variable Declaration ไทป์แบบใหม่ในภาษา C# เวอร์ชันสามเรียกว่า แอนนอนไมนัส ไทป์ (anonymous type) ทำให้สามารถประกาศเป็นตัวแปรที่ไม่ระบุว่าเป็นชนิดข้อมูลใดแน่ด้วยชนิดข้อมูล var

15. ตัวแปรแบบวาเรียนคืออะไร

ตัวแปรที่สามารถเปลี่ยนไทป์ไปมาได้ตามใจชอบตลอดเวลา

16. ITVD คล้ายหรือแตกต่างจากตัวแปรแบบวาเรียนอย่างไร

ตัวแปร ITVD ยังคงความเป็นไทป์เซฟตี (Type Safety) ของภาษาดอตเน็ตไว้ได้อย่างเหนียวแน่น เนื่องจากตัวแปลภาษา C# ฉลาดพอที่จะตรวจดูว่าตัวแปร ITVD ถูกกำหนดค่าอะไรไว้ แล้วจะกำหนดชนิดข้อมูลของตัวแปรให้เป็นไปตามนั้นเปลี่ยนแปลงภายหลังอีกไม่ได้

17. คำสั่ง Take คืออะไร

เมธอดทำหน้าที่กำหนดจำนวนแถวข้อมูลที่จะรับจากคิวรีโดยเริ่มจากแถวแรกไปจนถึงแถวที่ระบุในอาร์กิวเมนต์ (เหมือน TOP ในภาษา T-SQL)

18. การนำผลลัพธ์ของคิวรี LINQ ไปใช้นอกจากจะใช้ foreach แล้วท่านยังสามารถใช้แบบใดได้อีก

ไปใช้เป็นดาต้าซอร์สให้แก่ออพเจ็กต์ที่เป็น DC อย่าง DataGridView

19. คำสั่ง where ทำหน้าที่อะไร

คล้ายกับคำสั่ง WHERE ในภาษา T-SQL คือทำหน้าที่คัดกรองแถวข้อมูลโดยอาศัยนิพจน์บูลีนเป็นที่ตั้ง

20. อนุประโยค group ทำหน้าที่อะไร

แบ่งแถวข้อมูลออกเป็นกลุ่มๆ แต่ละกลุ่มอาจมีแถวข้อมูลจำนวนศูนย์ถึงหลายๆ แถว ขึ้นอยู่กับว่ามีข้อมูลตรงกับกุญแจที่ใช้ในการจัดกลุ่มหรือไม่

21. EM คืออะไร

Extension Method เมธอดเพิ่มขยาย ช่วยให้นิยามเมธอดที่ทำตัวเหมือนเป็นสมาชิกของคลาสแบบ sealed class หรือคลาสที่อยู่ในแอสเซมบลีได้

22. LE คืออะไร

Lambda Expression นิพจน์แลมดา การใช้ตัวกระทำ => ช่วยให้เขียนโค้ดได้กระชับอ่านง่ายขึ้นในหลายๆ บริบท (เช่นเมื่อทำดีลิเกต)

23. OI คืออะไร

Object Initializes ตัวกำหนดค่าเริ่มต้นให้ออพเจ็กต์ สิ่งที่ช่วยให้เขียนโค้ดได้กระชับอ่านง่ายขึ้น เพราะสามารถกำหนดค่าเริ่มต้นให้พรอพเพอร์ตีได้ในบรรทัดเดียวกับการนิวออพเจ็กต์

เฉลยคำถามท้ายบท [4]


Home Page  |   รายการบทความ   |   ลิงค์ที่เกี่ยวข้อง   |   laploy.com  |  เกี่ยวกับผู้เขียน

เฉลยคำถามท้ายบท [4]

บทที่ 16

1. ด้วยสัญลักษณ์ µ คืออะไร

คิวรีหลายชั้น

2. สัญลักษณ์ λ คืออะไร

คิวรีหลัก

3. สัญลักษณ์ Σ คืออะไร

คิวรีย่อย

4. ฟังก์ชัน MIN ใช้ทำอะไร

เป็นฟังก์ชันแบบแอกริเกตเพื่อหาค่าน้อยที่สุด

5. แถวข้อมูลกำพร้าคืออะไร

หมายถึงแถวข้อมูลในตารางหนึ่งที่ไม่มีคู่ในอีกตารางหนึ่ง

6. ตารางชั่วคราวคืออะไร

คือตารางที่ถูกสร้างขึ้นชั่วคราวในหน่วยความจำ สามารถนำไปใช้จอยกับตารางอื่นได้ และจะไม่หายไปเองเมื่อสิ้นแบตช์เหมือนอย่างตัวแปร ต้องใช้คำสั่ง DROP เพื่อลบ

7. ฟังก์ชันที่เหมาะจะนำมาใช้ตรวจหาค่า NULL คือฟังก์ชันอะไร

ฟังก์ชัน ISNULL()

8. ฟังก์ชันใช้แปลงชนิดข้อมูลคืออะไร

ฟังก์ชัน CAST()

9. ตารางสืบคืออะไร

คือตารางเสมือนที่เกิดจากการฉายแสดงข้อมูลด้วยคำสั่ง SELECT

10. คำสั่ง EXITSIS เหมือนหรือแตกต่างจาก IN อย่างไร

แตกต่างกันที่เมื่อคำสั่ง IN เราจะสนใจในข้อมูลที่ Σ คืนมาให้ แต่เมื่อใช้คำสั่ง EXITSIS เราไม่สนใจตัวข้อมูลเลย

 

บทที่ 17

1. เคอร์เซอร์แปลว่าอะไร

หมายถึงอะไรก็ตามที่กำลังวิ่งอยู่

2. วิธีประกาศเคอร์เซอร์ทำได้โดยใช้คำสั่งอะไร

CREATE CURSOR

3. เมื่อเลิกใช้เคอร์เซอร์แล้วควรทำอะไร

เวนคืนหน่วยความจำที่ใช้สำหรับเคอร์เซอร์และ DT ด้วยคำสั่ง DEALLOCATE

4. เคอร์เซอร์มีกี่ชนิด อะไรบ้าง

สี่ชนิดคือ Static, Dynamic, Forward-only และ Scroll

5. @@FETCH_STATUS คืออะไร

ตัวแปรโกบัลของ SQL2008 ทำหน้าที่ให้ค่าสถานะของการดึงข้อมูล (Fetch) จาก DT ของเคอร์เซอร์ หากการดึงข้อมูลทำได้เรียบร้อยดี ค่าของ @@FETCH_STATUS จะเท่ากับศูนย์ หากเกิดเออเรอร์จะเท่ากับ -1

6. การใช้เคอร์เซอร์ควรทำอย่างระวังเพราะอะไร

เพราะคิวรีที่ใช้เคอร์เซอร์อาจทำงานช้ากว่าคิวรีแบบเซตถึงสามสิบเท่า

7. CTE คืออะไร

คือนิพจน์ตารางร่วมเป็นกลไกอีกอย่างหนึ่งที่ช่วยให้สร้าง DT ได้

8. CTE แต่ต่างจากคิวรีย่อยย่างไร

แตกต่างตรงที่ CTE ต้องประกาศนิยาม DT ไว้ก่อนก่อนคำสั่ง SELECT ขณะที่คิวรีย่อยที่มีโค้ดฝังอยู่ภายในรายการคอลัมน์ของคำสั่ง SELECT

9. คำสั่งบรรทัดสุดท้ายในแบตช์ที่อยู่ก่อนหน้า CTE ต้องใส่อะไร

ต้องใส่เครื่องหมายเซมิโคลอน

10. เทรตาจอย (θ-join) คืออะไร

การจอยแบบมีเงื่อนไข

11. CTE มีข้อดีกว่าการทำด้วยคิวรีย่อยอย่างไร

อ้างถึง DT ที่เกิดจากคิวรีย่อยได้เพียงจุดเดียว แต่สามารถอ้างอิง DT ที่เกิดจาก CTE ได้ในหลายๆ จุด ในแบตช์เดียวกัน

12. รีเคอร์ชันคืออะไร

การเขียนโค้ดที่เรียกตัวเอง

13. คิวรีแบบรีเคอร์ซีฟมีประโยชน์อย่างไร

มีประโยชน์เมื่อใช้นำไปท่องโครงสร้างที่เป็นลำดับชั้น

14. การเขียนคิวรีรีเคอร์ซีฟในภาษา T-SQL แตกต่างจากการเขียนรีเคอร์ซีฟในภาษา C# อย่างไร

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

 

บทที่ 18

1. QOP คืออะไร

Query Optimization การปรับแต่งคิวรีให้มีประสิทธิภาพสูงสุด

2. QAP คืออะไร

Query Analyze Practicing การวิเคราะห์การทำงานของคิวรีเพื่อตรวจสอบว่าเกิดอะไรขึ้นบ้างเมื่อสั่งให้คิวรีทำงาน

3. EP คืออะไร

Execution Plan แผนการทำงานที่ SQL2008 วางไว้เพื่อกระทำต่อคิวรี

4. กระบวนการอันเกี่ยวเนื่องกับ T-SQL แบ่งออกอย่างคร่าวๆ ได้เป็นอะไร

กระบวนการที่เกิดขึ้นภายในเอ็นจินสัมพันธ์และกระบวนการที่เกิดขึ้นภายในเอ็นจินจัดการหน่วยบันทึก

5. RE คืออะไร

Relational Engine เอ็นจินสัมพันธ์คือโปรแกรมใน SQL2008 ที่ทำงานเกี่ยวข้องกับการแปลคิวรีแล้วนำไปดำเนินการโดยคิวรีออพติไมเซอร์

6. SE คืออะไร

Storage Engine เอ็นจินจัดการหน่วยบันทึก คือโปรแกรมใน SQL2008 หน้าที่อ่านหรือบันทึกข้อมูลในฮาร์ดดิสก์

7. QP คือไร

Query Parsing การแปลคิวรี คือกระบวนการที่ RE ทำให้คิวรีภาษา T-SQL กลายเป็นคำสั่งที่ SE สามารถนำไปปฏิบัติได้

8. PT คืออะไร

Parse Tree แผนภูมิต้นไม้แสดงการกระจายคำในไวยากรณ์ ทำหน้าที่นำเสนอลำดับขั้นตอนต่างๆ ที่จำเป็นต้องใช้เพื่อปฏิบัติตามคำสั่งในคิวรี

9. QAZ คืออะไร

Query Algebrizer พีชคณิตกร มีหน้าที่ตรวจสอบในคิวรีว่ามีการกำหนดหรืออ้างถึงชื่ออะไรบ้าง

10. AB คืออะไร

Aggregate Biding

การผูกแอกริเกต การตรวจสอบว่าคิวรีนั้นมีการทำแอกริเกตหรือไม่

11. QPT คืออะไร

Query Processor Tree แผนภูมิต้นไม้ของตัวประมวลผลคิวรี

12. QO

Query Optimizer คิวรีออพติไมเซอร์ คือตัวจักรสำคัญของโปรแกรม SQL2008 ในการทำงานเกี่ยวกับคิวรี

13. CBP คืออะไร

Cost-Based Plan แผนการทำงานอิงค่าใช้จ่าย คำว่าค่าใช้จ่ายในที่นี้หมายถึงค่าความสิ้นเปลืองทรัพยากรของระบบ เช่นซีพียู I/O รวมถึงเวลาที่ต้องใช้ในการปฏิบัติด้วย

14. TP คืออะไร

Trivial Plan แผนปลีกย่อย เป็น CBP พื้นฐานสำหรับคิวรีง่ายๆ ทั่วไป

15. EC คืออะไร

Estimated Cost ค่าประเมินคือค่าใช้จ่ายในการทำงานของคิวรีที่เกิดจากการคาดการของ QO

16. HV คืออะไร

Heuristic Evaluation หลักการหากวิธีดีสุดเพื่อเลือก CBP แบบที่ดีที่สุด QO ทำ

  1. เมื่อถึงคราวทำงานจริงๆ SE อาจไม่ดำเนินการตาม EP เพราอะไร

เพราะ EP ที่ได้ไม่เหมาะกับการทำงานแบบขนาน หรือ SD เก่าเกินไปหรือถูกเปลี่ยนแปลงหลังจาก QO ใส่ EP ไว้ในแคชแล้ว

18. EEP คืออะไร

Estimated Execution Plan แผนการทำงานโดยประเมินเป็นแผนการที่ QO ส่งให้ SE ทำงาน

19. AEP คืออะไร

Actual Execution Plan แผนการทำงานจริง ขั้นตอนการทำงานหรือตัวดำเนินการต่างๆ ที่ทำงานไปแล้ว

20. EPC คืออะไร

Execution Plan Cache แคชเก็บแผนงาน

21. EPR คืออะไร

Execution Plan Reuse การนำ EP กลับมาใช้งานใหม่

22. เลซีไรเตอร์คืออะไร

Lazywriter เป็นโปรเซสของ SQL2008 ทำหน้าที่ตรวจสอบว่า EP ในแคชหมดอายุหรือยัง

23. DMV คืออะไร

Dynamic Management View คือวิวที่ใช้เพื่อตรวจสอบว่า QE และ SE สร้าง EP อะไรไว้บ้าง

24. DEEP คืออะไร

ปุ่ม Display Estimated Execution Plan ใช้เพื่อให้แสดง EEP โดยไม่ต้องรันคิวรี

25. ESP คืออะไร

Execute and Show Plan โหมดปฏิบัติและแสดงแผนการทำงาน

26. IAEP คืออะไร

ปุ่ม Include Actual Execution Plan ทำหน้าที่เปิด-ปิดโหมด ESP

27. PO คืออะไร

Physical Operator ตัวดำเนินการทางกายภาพ ใช้เพื่อแสดงการกระทำที่เกิดขึ้นจริงๆ

28. LO คืออะไร

Logical Operator ตัวดำเนินการทางตรรกะ ใช้เพื่อแสดงการทำนายหรือคาดการณ์กระบวนการที่จะเกิดขึ้น

29. CC คืออะไร

Computed Column เป็นคอลัมน์ที่เกิดจากการคำนวณ

30. COI คืออะไร

Covering Index ดรรชนีครอบคลุม เป็นดรรชนีที่ถูกสร้างขึ้นเพื่อให้ครอบคลุมความต้องการ หรือครอบคลุมคอลัมน์ที่ต้องการใช้ในคิวรี

 

บทที่ 19

1. หากต้องการผลลัพธ์แบบ CUBE แต่ไม่ใช้คำสั่ง CUBE ทำได้หรือไม่

ทำได้โดยเขียน SELECT หลายๆ ชุดแล้วนำมาเชื่อมด้วยยูเนียน

2. เมื่อใช้คำสั่ง ROLLUP ทำให้ผลลัพธ์เป็นอย่างไร

เกิดการกระจายกลุ่มที่ทำแอกริเกตออกตามความเป็นไปได้ในลักษณะต่างๆ ครบทุกแบบ

3. คำสั่ง PIVOT ทำหน้าที่อะไร

นำข้อมูลในแถวข้อมูลมาทำเป็นคอลัมน์ ผลลัพธ์ที่ได้คล้าย Pivot table ในโปรแกรม Excel

4. Hardcode คืออะไร

การระบุค่าตายตัวในโค้ดโดยตรงไม่ได้นำมาจากฐานข้อมูล เช่นการเปลี่ยนรหัสพนักงานให้เป็นชื่อทำโดยการตั้งชื่อเล่นของคอลัมน์ด้วยคำสั่ง AS

5. คำสั่ง UNPIVOT ทำหน้าที่อะไร

ทำหน้าที่ตรงกันข้ามกับ PIVOT คือแปลงเมทริกซ์กลับไปเป็นตาราง (tabular ทาบูลาร์)

6. คำสั่งอะไรเปลี่ยนข้อมูลจากแนวนอนไปเป็นแนวตั้ง หรือเปลี่ยนจากแถวไปเป็นคอลัมน์

PIVOT

7. ฟังก์ชันในกลุ่มวินโดว์ประกอบด้วยคำสั่งอะไรบ้าง

ROW_NUMBER, OVER, PARTITION BY, RANK, DENSE_RANK และ ORDER BY

 

บทที่ 20

1. วิวคืออะไร

คือคิวรีภาษา T-SQL ทำหน้าที่เป็นตารางเสมือนฉายแสดงข้อมูลจากตารางเดียวหรือจากหลายๆ ตาราง

2. ประโยชน์ของวิวคืออะไร

ช่วยให้รวมคอลัมน์จากหลายๆ ตารางมาเป็นกลุ่มเดียวกัน เพื่อให้เกิดรูปแบบข้อข้อมูลในลักษณะใดลักษณะหนึ่ง ผู้ใช้ (หมายถึง end-user) สามารถใช้วิวเพื่อเข้าถึงข้อมูลที่ต้องการได้โดยไม่จำเป็นต้องได้รับสิทธิให้เข้าถึงตารางจริงๆ

3. วิวอำนวยความสะดวกให้ผู้ใช้ได้อย่างไร

ผู้ใช้ไม่จำเป็นต้องเขียนคิวรีเพื่อเชื่อมโยงตารางต่างๆ เอง และไม่ต้องสนใจกฎทางธุรกิจที่อาจมีการประมวลผลซับซ้อน แต่ผู้ใช้สามารถเขียนคิวรีให้ทำงานกับวิวเพียงแค่ใช้คำสั่ง SELECT * ก็จะได้ข้อมูลที่ต้องการครบ และอาจใช้คำสั่ง WHERE กับเงื่อนไขง่ายๆ เพื่อคัดกรองแถวข้อมูลจากวิวได้

4. วิวใช้รักษาความปลอดภัยได้อย่างไร

สร้างวิวหลายๆ แบบแล้วกำหนดให้พนักงานแต่ละกลุ่มเข้าถึงข้อมูลทางอ้อมผ่านวิวแต่ละแบบ

5. วิวหลายชั้นเป็นอย่างไร

วิวที่คิวรีข้อมูลจากวิวอื่น

6. ทริกเกอร์คืออะไร

ออพเจ็กต์ฐานข้อมูลซึ่งเป็นโค้ดที่จะทำงานเองโดยอัตโนมัติเมื่อเกิดเหตุการณ์บางอย่าง

7. ทริกเกอร์เหมือนหรือแตกต่างจากสพร็อกซ์หรือไม่อย่างไร

เหมือนกันที่เป็นโค้ดที่ถูกเก็บไว้เป็นออพเจ็กต์ ต่างกันที่เรียกให้สพร็อกซ์ทำงานเมื่อใดก็ได้ แต่ทำเช่นนั้นกับทริกเกอร์ไม่ได้

8. ทริกเกอร์จะทำงานเมื่อใด

ทำงานเองโดยอัตโนมัติเมื่อถูกกระตุ้นด้วยเหตุการณ์ที่กำหนดไว้

9. ทริกเกอร์มีกี่แบบ

มีสองแบบคือแบบ DML และแบบ DDL

10. ทริกเกอร์ที่พบบ่อยเป็นแบบใด

ทริกเกอร์แบบ DML

11. ข้อควรระวังในการใช้ทริกเกอร์คืออะไร

โจทย์ใดสามารถใช้ข้อกำหนด (Constraint) ได้ให้ใช้ข้อกำหนดแทนการใช้ทริกเกอร์ เพราะจะทำให้การทำงานมีประสิทธิภาพดีกว่า

12. ทริกเกอร์อยู่ที่ใดใน OE ของ SSMS

ภายใต้ไอคอน AdventureWorks / Table / Customer / Triggers

13. คำสั่ง RAISERROR ทำหน้าที่อะไร

ทำหน้าที่แสดงข้อความที่กำหนด

14. วิธีส่งอีเมลในคิวรีทำอย่างไร

เรียกสพร็อกซ์ชื่อ sp_send_dbmail

 

บทที่ 21

1. คำว่า Dynamic หมายถึงอะไร

หมายถึงเปลี่ยนแปลงได้ มีพลวัต ไม่ตายตัว

2. DSQL คืออะไร

คือคิวรีที่มีพลวัต

3. โค้ดที่เปลี่ยนแปลงตัวเองได้มีข้อดีอย่างไร

โปรแกรมมีความยืดหยุ่นรองรับสถานการณ์ที่เปลี่ยนไปได้

4. ข้อเสียของ DSQL คืออะไร

ดีบักยากและอาจทำให้เกิดช่องโหว่ในการรักษาความปลอดภัย

5. วิธีใช้งาน DSQL อย่างง่ายที่สุดอาศัยคำสั่งอะไร

คำสั่ง EXECUTE

6. คำสั่ง IF แต่ต่างจาก CASE อย่างไร

IF จะทำงานกับประโยคคำสั่งส่วนที่ไม่ใช่คิวรี ส่วนคำสั่ง CASE ใช้ทำงานภายในคิวรี

7. เครื่องหมายฟันหนู (‘) ใช้ทำอะไร

กำหนดขอบเขตของข้อความ

8. พารามิเตอร์มีประโยชน์อย่างไรต่อ DSQL

ช่วยให้ใช้งาน DSQL ได้พลิกแพลงได้หลากหลายยิ่งขึ้น

9. อะไรที่ช่วยให้ใช้พารามิเตอร์กับ DSQL ได้

สพร็อกซ์ชื่อ sp_executesql

10. วิธีใช้ sp_executesql ทำได้อย่างไร

ทำได้โดยใช้คำสั่ง EXECUTE ตามด้วย sp_executesql แล้วตามด้วยชื่อตัวแปรที่เป็นพารามิเตอร์

11. SQL Injection คืออะไร

การโจมตีแบบ SQL Injection คือการที่ผู้ไม่ประสงค์ดีใช้โปรแกรมฝั่งไคลแอนท์สอดแทรกสคริปต์คำสั่ง SQL โดยมีจุดมุ่งหมายเพื่อสร้างความเสียหายต่อฐานข้อมูล