Contents

1 Index Seek?
2 豐 覈 Page襯 曙螳?
3 Random Access?
4 Random Access 覿
5 Non-Clustered Index Clustered Index螳 蟷 譟伎る?
6 誤 覲伎
7 unique vs non-unique
8 碁煙れ ろ企
9 碁煙 り
10 蟾 螻褐朱...
11 谿瑚襭


1 Index Seek? #

Index Seek Non-Clustered Index襯 碁煙 碁Μ襯 螻 貊貊 谿伎 一危一 蠏狩り る . Non-Clustered Index Dense Index願, Secondary Index. (誤 Index襯 谿瑚蠍 覦) れ螻 螳 Query襯 り 螳.

SELECT * FROM TableA
WHERE ColA IN ('B105', 'C101')

--ColA Non-Clustered Index螳 焔 .
--Clustered Index 焔讌 . 
-- Query れ ろ Index Seek襯 り 螳.

Non-Clustered Index螳 れ螻 螳 蟆朱り 螳. Data Page Heap企. 谿瑚襦, 企 DBMS願唄 一危一 /豢レ Byte襦 殊企讌 . DBMS襷 豕 /豢 螳 伎 . Oracle企 Sybase 企 豕 /豢 襯 譟一 朱 MS-SQL Server 豕 /豢 螳 8KB襦 伎 . (讀, 1Byte襯 所鍵 伎 8KByte襯 曙伎 .) 蠏碁殊 Index Page, Data Page 覈 8KB企.

index_seek01.jpg

SQL Server 'B105'襯 谿剰鍵 れ螻 螳 . ( Index Seek 覿襯碁.)

  1. Root Page襯 曙伎 れ 蠏狩 Index Page襯 谿城. 'B102'襦 2覯讌 Index Page 'B102' ~ 'B105'蟾讌 Root Page .
  2. Index Depth 2企襦 譴螳 碁螳 螻 襴碁企. Leaf Index Page 襦貅危郁 螳襴る 一危 伎 企 Row襯 暑.

SQL Server 'C101'襯 谿剰鍵 れ螻 螳 .

  1. Root Page襯 曙伎 れ Index Page襯 谿城. ('C101' 'B106'覲企 螻 'C104'覲企 朱襦 3覯讌 Index Page )
  2. Index Depth 2企襦 譴螳 碁螳 螻 襴碁企. Leaf Index Page 襦貅危郁 螳襴る 一危 伎 企 Row襯 暑.

2 豐 覈 Page襯 曙螳? #

豐 覈 Page襯 曙螳? れ螻 螳 2螳讌 蟆曙郁 .

  • Non-Unique Index 蟆曙
  • Unique Index 蟆曙

'B105'襯 谿剰鍵 3Page(Index Page = 2, Data Page = 1)襯 曙螻, 'C101'襯 谿剰鍵 3Page襯 曙. 蠏碁覩襦 豐 6Page襯 曙. 願 Unique Index 蟆曙一 蠏碁. 襷 Non-Unique Index朱 'B105' れ 螳蟾讌 曙伎朱 'B105'螳 襷讌襷企朱 蟆 朱襦 1Page(Index Page 3)蟾讌 曙伎朱 . 蠏碁覩襦 襷 Uniqueる 覦 Unique襯 覈 碁煙るゼ 燕 譯朱 蟆 焔レ 企 .

蠏碁 れ 豐 Data Page 4Page企襦 碁煙るゼ 伎 蠏(6 or 7 Page) I/O螳 襷. 讀, /豢 觜 . Index Seek覲企る Data Page襯 豌覿 蟾讌 曙企れ企伎 覿覿襷 豢豢 蟆[1] . 蠏碁覩襦 CPU觜 Index Seek 覲企る Full Scan 蟆企. 企 伎 襷 豈 Row襯 螳讌 企 碁煙るゼ 燕讌 襷手 蟆企. Query覓語 Index Seek襯 蟆朱 螳 讌襷, れ襦 DBMS Full Scan朱 豕 蟆企. MS-SQL Server 觜一螻旧 覦讌讌 讌襷 伎 蠍磯蓋 觜螻磯逢覯 螳. 蠏碁覩襦 Index Seek襯 讌 Full Scan 讌 Index襯 伎 I/O Full Scan I/O襯 觜蟲 I/O襦 蠏狩 覦覯 覃 蠏瑚 牛磯伎 螻 覿覿 殊 蟆企.

3 Random Access? #

Random Access, Disk 一危磯ゼ 蠏狩 覓朱Μ (伎讌 ) 豺 蠏狩る 詞企. 一危一 覓朱Μ 豺 螻朱 覲蠍 覓語 襷蠏碁襦 'Random' 蠏殊企. 一 OS 譟郁覈企朱 覃 一危一 覓朱Μ 豺螳 覲蟆暑讌襷, 朱Μ朱 覲 蟆螻 螳. 螳 蠍磯 Random Access Oracle讓曙 (殊ろ 企ゼ 蠏碁 螳碁 蟆 螳) 襷企. 螳 螳 覿讌 谿.. 譟磯 企糾 襷れ. Random Access朱 企ゼ 危危 襷 る 螳 蟇碁碁. 殊 豈 覿♀ り 蟆 危危讌襷 覿 蠏碁讌 襷蠍磯ゼ 覦. Random Access襯 SQL Server 2000 Bookmark Lookup 手 覿襯願, SQL Server 2005 危 覯 Key Lookup RID Lookup 企手 覿襯碁. (願 譴 蟆 . 讌 旧 伎企手 螻 朱 譬.)

Random Access 'B105', 'C101'襯 谿城 螻殊 譴 2覯讌 螻殊 ' Leaf Index Page 襦貅危郁 螳襴る 一危 伎 企 Row襯 暑. ' 覿覿 Random Access手 覿襯碁. Random企朱 蟆 Data Page Data Page伎 豺螳 Random企襦 覿讌 企企. (豈 覲瑚 螻 螳企.) 襷 豈 Random Access襯 譴企手 蠏 伎螳 Random 蠍磯 . 覈 Data Page螳 Disk襷 譟伎螻 Memory 譟伎讌 り 螳 覲伎. SQL Server 'B105'螳 譟伎 Data Page襯 Disk 曙伎 Memory襦 殊れ[2] . 'C101' るジ Data Page 譟伎螻, Memory 譟伎讌 朱襦 Disk Meomory襦 Data襯 曙 れ . 企 讌 伎 CPU Memory襷 蠏手ル[3] 曙 貉危 蟲譟一 覓語 覓語企. 襷 'B105' 'C101' 螳 Data Page 譟伎る Disk Memory襦 一危磯ゼ 殊襴 殊 讌 螻 Memory 讌 Access覃 覩襦 豌襴 觜 譴企 蟆企. 蠏碁 一危一 る譟磯 覈 螳 焔レ レ 殊り 蟆企. 讌襷 れ螻 螳 貎朱Μ Random Access螳 殊企讌 蟆企.

 SELECT ColA FROM TableA
WHERE ColA IN ('B105', 'C101')

Random Access螳 殊企讌 伎 Index Page襷 曙企 蟆郁骸襯 詞 蠍 覓語企. 襷 TableA螳 ColA, ColB, ColC襯 螳讌 蟆曙 れ螻 螳 Query Random Access螳 殊企 蟆企.

--ColA Non-Clustered Index螳 焔 螻, Index Seek襯 螳. 

SELECT ColA, ColB --ColB螳 Index襷 曙伎 覈襯碁. 一危 伎襯 曙伎朱 觜襦 ColB襯 螳語  .
FROM TableA 
WHERE ColA IN ('B105', 'C101') 

SELECT ColA, ColB, ColC --ColC襦  襷谿螳讌.
FROM TableA
WHERE ColA IN ('B105', 'C101')

SELECT ColA FROM TableA
WHERE ColA IN ('B105', 'C101')
AND ColB = '2005' --SELECT 覈讌 讌襷 企 Row螳 譟郁唄 襷讌 螳る 一危 伎襯 曙伎 . 

SELECT ColA FROM TableA
WHERE ColA IN ('B105', 'C101')
ORDER BY ColC -- 伎 ColC螳 蠍 覓語  一危 伎襯 曙伎 . 

4 Random Access 覿 #

れ 一危一 蠏狩蠍 伎 一危磯伎れ 觚襦企 伎煙企 覿襴讌 豕豢 襦 蠏殊 伎 る 詞企. 譴 蟆 1覦危碁ゼ 暑朱 DBMS 豕 /豢 襷 曙 れ碁る 蟆企. MSSQL Server 蟆曙磯 豕 /豢 螳 8KB襦 伎 蠍 覓語 8KB襯 曙 れ碁. 蠏碁覩襦 Heap企 Clustered Index螳 企 貉殊 蠍一朱 企至 れ 覓朱Μ 襦 螳螳 Bookmark Lookup[4] れ 觜 蟆一 蟆企.

random_access01.jpg

Bookmark Lookup 觜 貎朱Μ 觜 谿讌 蟆朱 . 蠏碁 襷 伎 蠏狩伎朱 一危磯ゼ 螳語 . 願 覦襦 れ襦 磯Μ螳 螳 伎螻 れ 谿伎企.


5 Non-Clustered Index Clustered Index螳 蟷 譟伎る? #

蠏碁殊 Heap Random Access 覦覯 伎手鍵 . 讌襷 Clustered Index Non-Clustered Index螳 蟷 譟伎る Access 覦覯 れ. 襷 襷 曙/螳煙/螳 殊企螻, ColB(螳 2005, 2006) Clustered Index螳 焔 り 螳覃 れ螻 螳 蠏碁殊 蟆企.

index_seek02.jpg

Clustered Index螳 螻, Non-Clustered Index螳 譟伎 企. 企 蟆曙一 Clustered Index襯 燕覃 Non-Clustered Index螳 れ 襷れ 讌. 覃 Clustered Index襯 蟲燕蠍 伎 Split企 覦一伎 蟆覃 襦貅危磯れ 碁螳 蟆 覯襴蠍 覓語企. 襷 碁煙るゼ れ 燕讌 る Non-Clustered Index Leaf Node 襦貅危一 螳覺 螳襴り 朱Μ朱 覲伎レ . (襷 朱 ) 蠏碁覩襦 企 Non-Clustered Index れ 襷れ 讌.

Clustered Index襯 燕 Unique襯 覈讌 蟆曙[5] 狩蟆 襷り鍵 4Byte襯 豢螳 狩蟆 襷. 覃 Clustered Index 伎襯 螳襴り 蠍 覓(企 伎 豌 螳襴り り 覲企 ) 蠏碁手骸 螳 Non-Unique Clustered Index襯 燕 蟆曙 Unique讌 蟆曙 燕 伎襯 螳襯危 蠍 覓語企.

6 誤 覲伎 #

れ るゼ 覲伎.

 use pubs
go

exec sp_helpindex titles
/*
index_name        index_description                                 index_keys 
----------------- ------------------------------------------------- ----------
titleind          nonclustered located on PRIMARY                   title      
UPKCL_titleidind  clustered, unique, primary key located on PRIMARY title_id
*/

dbcc show_statistics (titles, titleind)
/*
All density         Average Length       Columns              
------------------- -------------------- ---------------------
5.5555556E-2        33.0                 title
5.5555556E-2        39.0                 title, title_id --> title_id 企ろ磯 碁煙り 焔 .
*/

狩企ろ磯 碁煙れ All Density 狩企ろ磯 碁煙るゼ ′ 轟 title襷螻 企ろ磯 碁煙れ title_id螳 蟆 覲 . 讀, 狩企ろ磯 碁煙 語 るジ 一危磯ゼ 蠏狩 螳 朱 企ろ磯 碁煙る 企ろ磯 碁煙り 朱 (Heap) 蠏殊 伎 , 蠍一 title_id 企ろ磯 碁煙り 焔 朱襦 dbcc show_statistics 蟆郁骸 蟆企. 企 企朱 title訖襷 title_id螳 SQL覓語 企 Bookmark lookup 覲 . 覃 蟆郁骸 覲企 覦 螳 狩企ろ磯 碁煙れ 襴碁 企ろ磯 碁煙れ 螳(title title_id れ 一危) 蠍 覓語企. 願 ろ螻 覲伎企 Bookmark lookup企.

蠍一 螳讌 れ Clutered Index Non-Clutered Index襯 燕 螳 焔レ レ 殊る 蟆企. 襷 Non-Clustered Index襯 燕螻 Clustered Index襯 燕 蟆曙 Non-Clustered Index Leaf Node Clustered Index Key Value襦 螳煙伎 . 蠏碁覩襦 Clustered Index Non-Clustered Index襯 狩 燕 蟆曙郁 る Clustered Index覿 燕 蟆 襴.

7 unique vs non-unique #

use tempdb;

set statistics io on
create table index_test
(
	seq bigint
);

insert index_test
select top 10000 row_number() over(order by(select 1)) seq
from master..spt_values a
	cross join master..spt_values b;

create index idx1 on index_test(seq);	
create unique index idx2 on index_test(seq);

--non unique index
select * from index_test with (index=idx1)
where seq <= 255 --朱Μ 所鍵  2, 譟郁唄 seq <= 256 企 朱Μ 所鍵 3

--unique index
select * from index_test with (index=idx2)
where seq <= 367 --朱Μ 所鍵  2, 譟郁唄 seq <= 368 企 朱Μ 所鍵 3

8 碁煙れ ろ企 #

襷 れ れ螻 螳 ろ企ゼ 螻 .

  1. 企ろ磯 碁煙る 覦覩襦 燕讌 襷 .
  2. れ 襴螻, 碁煙れ 蠏殊 觜襯企.
  3. ′語 覯 10%危 蟆曙 碁煙るゼ 蟆 觜襯企.
  4. 碁煙るゼ 燕 企 曙, , 螳煙 碁煙り 企覲企 襴.

ろ伎手? ろ伎 . 讌 螻ろ讌 蠍 覓語企. 覈 覓語レ 磯殊 朱 覓語伎 覿企 襷 襴襯 蟲覿 . 碁煙る 一危 蠏殊 蠎 覓朱Μ 企. 蠏碁 磯Μ螳 螳 伎螻 れ 磯 譟伎. 螳螳 襷蟆 碁煙るゼ 蟲燕 蟆 襷れ 譴.

9 碁煙 り #

SQL_356.jpg
蠏碁 豢豌:http://www.dbguide.net/db.db?cmd=view&boardUid=148221&boardConfigUid=9&categoryUid=216&boardIdx=140&boardStep=1

10 蟾 螻褐朱... #

伎 螻 矩る Inside SQL Server 襴讀 豈 覲願碓 SQL襷り碓讌 蟲蠍 覦. 伎 蟾 螻褐 覈襯碁. る 襷 DB企 襾濠 磯 讌レる 覲伎レ .

11 谿瑚襭 #

碁煙 糾覲 螳煙
/*
企覲 碁煙れ  糾螳 襷讌襷朱 一危碁 讌 谿剰鍵 
伎 (朱) 2003.10. 
 (MS) 2004.8. 
*/ 
  
SELECT  USER_NAME( OBJECTPROPERTY( i.id, 'OwnerID' ) ) AS Owner
   ,OBJECT_NAME( i.id ) AS [Table]
   , i.name AS [Index]
   ,CASE INDEXPROPERTY( i.id , i.name , 'IsClustered')  WHEN 1 THEN 'Y'  ELSE ''   END AS IsClustered
   ,CASE INDEXPROPERTY( i.id , i.name , 'IsUnique'    )  WHEN 1 THEN 'Y'  ELSE ''   END AS IsUnique
   ,STATS_DATE( i.id , i.indid ) AS LastUpdatedDate
   ,dPages * 8. /1024 AS MB
FROM sysindexes AS i
WHERE OBJECTPROPERTY( i.id, 'IsMSShipped' ) = 0 
 AND 1 NOT IN ( INDEXPROPERTY( i.id , i.name , 'IsStatistics'   ) 
  , INDEXPROPERTY( i.id , i.name , 'IsAutoStatistics' ) 
  , INDEXPROPERTY( i.id , i.name , 'IsHypothetical'   )  )
 AND i.indid BETWEEN 1 And 250
-- AND dPages > 100 -- 蠍 企 覓伎
 AND (STATS_DATE( i.id , i.indid ) < getdate() - 15 
  OR STATS_DATE( i.id , i.indid ) IS NULL) --15 伎蟾讌 一危  蟆
ORDER BY Owner, [Table], [Index] 
  
--豢豌: dbguide.net 


譬 蠍 覲願 螳. 螳. -- db願覓 2023-01-05 12:59:41