第äºæ¬¡åçï¼
é®é¢è¡¥å
ï¼è½ä¸è½å
·ä½ç¹ï¼æ°å»ºä¸ä¸ªç´¢å¼å°±å¯ä»¥äºå
åºæ¬ä¸å¯ä»¥è¿ä¹è¯´ï¼ä¸è¿ä½ ä¹å¯ä»¥ä¿®æ¹ç´¢å¼ã
è®°ä½ï¼
ç´¢å¼å
¶å®å
³é®ç®çæ¯ä¸ºäºå å¿«æ£ç´¢é度è建ç«çï¼æ以ï¼æä¹ç¨ç´¢å¼æ¯æ°æ®åºç³»ç»æ¬èº«çäºæ
ï¼ä½ä¸ºæ°æ®åºè®¾è®¡æ使ç¨è
ï¼è®¾è®¡å¹¶å建好索å¼ç¶åä½éªå ä¸ç´¢å¼åçæ¥è¯¢åå¿«çæè§å°±è¡äºãæ以ï¼ç´¢å¼æä¹ç¨å°±å为äºâæä¹å建åéçç´¢å¼â
以ä¸åçæ¯å¦ç¬¦åä½ çè¦æ±ï¼ä½ è¿æä»ä¹é®é¢ï¼
第ä¸æ¬¡åçï¼
ä¸ãç´¢å¼æ¯ä»ä¹
ç´¢å¼æ¯ä¸è¡¨æè§å¾å
³èçç£çä¸ç»æï¼å¯ä»¥å å¿«ä»è¡¨æè§å¾ä¸æ£ç´¢è¡çé度ãç´¢å¼å
å«ç±è¡¨æè§å¾ä¸çä¸åæå¤åçæçé®ãè¿äºé®åå¨å¨ä¸ä¸ªç»æï¼B æ ï¼ä¸ï¼ä½¿ SQL Server å¯ä»¥å¿«éææå°æ¥æ¾ä¸é®å¼å
³èçè¡ã
表æè§å¾å¯ä»¥å
å«ä»¥ä¸ç±»åçç´¢å¼ï¼
* èé
o èéç´¢å¼æ ¹æ®æ°æ®è¡çé®å¼å¨è¡¨æè§å¾ä¸æåºååå¨è¿äºæ°æ®è¡ãç´¢å¼å®ä¹ä¸å
å«èéç´¢å¼åãæ¯ä¸ªè¡¨åªè½æä¸ä¸ªèéç´¢å¼ï¼å 为æ°æ®è¡æ¬èº«åªè½æä¸ä¸ªé¡ºåºæåºã
o åªæå½è¡¨å
å«èéç´¢å¼æ¶ï¼è¡¨ä¸çæ°æ®è¡æææåºé¡ºåºåå¨ãå¦æ表å
·æèéç´¢å¼ï¼å该表称为èé表ãå¦æ表没æèéç´¢å¼ï¼åå
¶æ°æ®è¡åå¨å¨ä¸ä¸ªç§°ä¸ºå çæ åºç»æä¸ã
* éèé
o éèéç´¢å¼å
·æç¬ç«äºæ°æ®è¡çç»æãéèéç´¢å¼å
å«éèéç´¢å¼é®å¼ï¼å¹¶ä¸æ¯ä¸ªé®å¼é¡¹é½ææåå
å«è¯¥é®å¼çæ°æ®è¡çæéã
o ä»éèéç´¢å¼ä¸çç´¢å¼è¡æåæ°æ®è¡çæé称为è¡å®ä½å¨ãè¡å®ä½å¨çç»æåå³äºæ°æ®é¡µæ¯åå¨å¨å ä¸è¿æ¯èé表ä¸ã对äºå ï¼è¡å®ä½å¨æ¯æåè¡çæéã对äºèé表ï¼è¡å®ä½å¨æ¯èéç´¢å¼é®ã
o æ¨å¯ä»¥åéèéç´¢å¼çå¶çº§æ·»å éé®å以跳è¿ç°æçç´¢å¼é®éå¶ï¼900 åèå 16 é®åï¼ï¼å¹¶æ§è¡å®æ´èå´å
çç´¢å¼æ¥è¯¢ã
èéç´¢å¼åéèéç´¢å¼é½å¯ä»¥æ¯å¯ä¸çãè¿æå³çä»»ä½ä¸¤è¡é½ä¸è½æç¸åçç´¢å¼é®å¼ãå¦å¤ï¼ç´¢å¼ä¹å¯ä»¥ä¸æ¯å¯ä¸çï¼å³å¤è¡å¯ä»¥å
±äº«åä¸é®å¼ã
æ¯å½ä¿®æ¹äºè¡¨æ°æ®åï¼é½ä¼èªå¨ç»´æ¤è¡¨æè§å¾çç´¢å¼ã
ç´¢å¼å约æ
对表åå®ä¹äº PRIMARY KEY 约æå UNIQUE 约ææ¶ï¼ä¼èªå¨å建索å¼ãä¾å¦ï¼å¦æå建äºè¡¨å¹¶å°ä¸ä¸ªç¹å®åæ è¯ä¸ºä¸»é®ï¼å æ°æ®åºå¼æèªå¨å¯¹è¯¥åå建 PRIMARY KEY 约æåç´¢å¼ãæå
³è¯¦ç»ä¿¡æ¯ï¼è¯·åé
å建索å¼ï¼æ°æ®åºå¼æï¼ã
äºãç´¢å¼æä»ä¹ç¨
ä¸ä¹¦ä¸çç´¢å¼ä¸æ ·ï¼æ°æ®åºä¸çç´¢å¼ä½¿æ¨å¯ä»¥å¿«éæ¾å°è¡¨æç´¢å¼è§å¾ä¸çç¹å®ä¿¡æ¯ãç´¢å¼å
å«ä»è¡¨æè§å¾ä¸ä¸ä¸ªæå¤ä¸ªåçæçé®ï¼ä»¥åæ å°å°æå®æ°æ®çåå¨ä½ç½®çæéãéè¿å建设计è¯å¥½çç´¢å¼ä»¥æ¯ææ¥è¯¢ï¼å¯ä»¥æ¾èæé«æ°æ®åºæ¥è¯¢ååºç¨ç¨åºçæ§è½ãç´¢å¼å¯ä»¥åå°ä¸ºè¿åæ¥è¯¢ç»æéèå¿
须读åçæ°æ®éãç´¢å¼è¿å¯ä»¥å¼ºå¶è¡¨ä¸çè¡å
·æå¯ä¸æ§ï¼ä»èç¡®ä¿è¡¨æ°æ®çæ°æ®å®æ´æ§ã
设计è¯å¥½çç´¢å¼å¯ä»¥åå°ç£ç I/O æä½ï¼å¹¶ä¸æ¶èçç³»ç»èµæºä¹è¾å°ï¼ä»èå¯ä»¥æé«æ¥è¯¢æ§è½ã对äºå
å« SELECTãUPDATEãDELETE æ MERGE è¯å¥çåç§æ¥è¯¢ï¼ç´¢å¼ä¼å¾æç¨ãä¾å¦ï¼å¨ AdventureWorks æ°æ®åºä¸æ§è¡çæ¥è¯¢ SELECT Title, HireDate FROM HumanResources.Employee WHERE EmployeeID = 250ãæ§è¡æ¤æ¥è¯¢æ¶ï¼æ¥è¯¢ä¼åå¨è¯ä¼°å¯ç¨äºæ£ç´¢æ°æ®çæ¯ä¸ªæ¹æ³ï¼ç¶åéæ©æææçæ¹æ³ãå¯è½éç¨çæ¹æ³å
æ¬æ«æ表åæ«æä¸ä¸ªæå¤ä¸ªç´¢å¼ï¼å¦ææï¼ã
æ«æ表æ¶ï¼æ¥è¯¢ä¼åå¨è¯»å表ä¸çææè¡ï¼å¹¶æå满足æ¥è¯¢æ¡ä»¶çè¡ãæ«æ表ä¼æ许å¤ç£ç I/O æä½ï¼å¹¶å ç¨å¤§éèµæºãä½æ¯ï¼å¦ææ¥è¯¢çç»æéæ¯å 表ä¸è¾é«ç¾åæ¯çè¡ï¼æ«æ表ä¼æ¯æ为ææçæ¹æ³ã
æ¥è¯¢ä¼åå¨ä½¿ç¨ç´¢å¼æ¶ï¼æ索索å¼é®åï¼æ¥æ¾å°æ¥è¯¢æéè¡çåå¨ä½ç½®ï¼ç¶åä»è¯¥ä½ç½®æåå¹é
è¡ãé常ï¼æ索索å¼æ¯æ索表è¦å¿«å¾å¤ï¼å 为索å¼ä¸è¡¨ä¸åï¼ä¸è¬æ¯è¡å
å«çåé常å°ï¼ä¸è¡éµå¾ªæåºé¡ºåºã
æ¥è¯¢ä¼åå¨å¨æ§è¡æ¥è¯¢æ¶é常ä¼éæ©æææçæ¹æ³ãä½å¦æ没æç´¢å¼ï¼åæ¥è¯¢ä¼åå¨å¿
é¡»æ«æ表ãæ¨çä»»å¡æ¯è®¾è®¡å¹¶å建æéåæ¨çç¯å¢çç´¢å¼ï¼ä»¥ä¾¿æ¥è¯¢ä¼åå¨å¯ä»¥ä»å¤ä¸ªææçç´¢å¼ä¸éæ©ãSQL Server æä¾çæ°æ®åºå¼æä¼å顾é®å¯ä»¥å¸®å©åææ°æ®åºç¯å¢å¹¶éæ©éå½çç´¢å¼ã
ä¸ãç´¢å¼æä¹ç¨
ç´¢å¼å
¶å®å
³é®ç®çæ¯ä¸ºäºå å¿«æ£ç´¢é度è建ç«çï¼æ以ï¼æä¹ç¨ç´¢å¼æ¯æ°æ®åºç³»ç»æ¬èº«çäºæ
ï¼ä½ä¸ºæ°æ®åºè®¾è®¡æ使ç¨è
ï¼è®¾è®¡å¹¶å建好索å¼ç¶åä½éªå ä¸ç´¢å¼åçæ¥è¯¢åå¿«çæè§å°±è¡äºãæ以ï¼ç´¢å¼æä¹ç¨å°±å为äºâæä¹å建åéçç´¢å¼âï¼ä»¥ä¸è¯´æè¿ä¸ªé®é¢ï¼
ç´¢å¼è®¾è®¡ä¸ä½³å缺å°ç´¢å¼æ¯æé«æ°æ®åºååºç¨ç¨åºæ§è½ç主è¦éç¢ã设计é«æçç´¢å¼å¯¹äºè·å¾è¯å¥½çæ°æ®åºååºç¨ç¨åºæ§è½æ为éè¦ã为æ°æ®åºåå
¶å·¥ä½è´è·éæ©æ£ç¡®çç´¢å¼æ¯ä¸é¡¹éè¦å¨æ¥è¯¢é度ä¸æ´æ°æéå¼éä¹é´åå¾å¹³è¡¡çå¤æä»»å¡ãå¦æç´¢å¼è¾çªï¼æè
说索å¼å
³é®åä¸åªæå¾å°çå åï¼åéè¦çç£ç空é´åç»´æ¤å¼éé½è¾å°ãèå¦ä¸æ¹é¢ï¼å®½ç´¢å¼å¯è¦çæ´å¤çæ¥è¯¢ãæ¨å¯è½éè¦è¯éªè¥å¹²ä¸åç设计ï¼æè½æ¾å°æææçç´¢å¼ãå¯ä»¥æ·»å ãä¿®æ¹åå é¤ç´¢å¼èä¸å½±åæ°æ®åºæ¶ææåºç¨ç¨åºè®¾è®¡ãå æ¤ï¼åºè¯éªå¤ä¸ªä¸åçç´¢å¼èæ éç¹è±«ã
SQL Server ä¸çæ¥è¯¢ä¼åå¨å¯å¨å¤§å¤æ°æ
åµä¸å¯é å°éæ©æé«æçç´¢å¼ãæ»ä½ç´¢å¼è®¾è®¡çç¥åºä¸ºæ¥è¯¢ä¼åå¨æä¾å¯ä¾éæ©çå¤ä¸ªç´¢å¼ï¼å¹¶ä¾èµæ¥è¯¢ä¼åå¨ååºæ£ç¡®çå³å®ãè¿å¨å¤ç§æ
åµä¸å¯åå°åææ¶é´å¹¶è·å¾è¯å¥½çæ§è½ãè¥è¦æ¥çæ¥è¯¢ä¼åå¨å¯¹ç¹å®æ¥è¯¢ä½¿ç¨çç´¢å¼ï¼è¯·å¨ SQL Server Management Studio ä¸çâæ¥è¯¢âèåä¸éæ©âå
æ¬å®é
çæ§è¡è®¡åâã
ä¸è¦æ»æ¯å°ç´¢å¼ç使ç¨çåäºè¯å¥½çæ§è½ï¼æè
å°è¯å¥½çæ§è½çåäºç´¢å¼çé«æ使ç¨ãå¦æåªè¦ä½¿ç¨ç´¢å¼å°±è½è·å¾æä½³æ§è½ï¼é£æ¥è¯¢ä¼åå¨çå·¥ä½å°±ç®åäºãä½äºå®ä¸ï¼ä¸æ£ç¡®çç´¢å¼éæ©å¹¶ä¸è½è·å¾æä½³æ§è½ãå æ¤ï¼æ¥è¯¢ä¼åå¨çä»»å¡æ¯åªå¨ç´¢å¼æç´¢å¼ç»åè½æé«æ§è½æ¶æéæ©å®ï¼èå¨ç´¢å¼æ£ç´¢æç¢æ§è½æ¶åé¿å
使ç¨å®ã
建议çç´¢å¼è®¾è®¡çç¥å
æ¬ä»¥ä¸ä»»å¡ï¼
1. äºè§£æ°æ®åºæ¬èº«çç¹å¾ãä¾å¦ï¼å®æ¯é¢ç¹ä¿®æ¹æ°æ®çèæºäºå¡å¤ç (OLTP) æ°æ®åºï¼è¿æ¯ä¸»è¦å
å«åªè¯»æ°æ®çå³çæ¯æç³»ç» (DSS) ææ°æ®ä»åº (OLAP) æ°æ®åºï¼
2. äºè§£æ常ç¨çæ¥è¯¢çç¹å¾ãä¾å¦ï¼äºè§£å°æ常ç¨çæ¥è¯¢èæ¥ä¸¤ä¸ªæå¤ä¸ªè¡¨å°æå©äºå³å®è¦ä½¿ç¨çæ佳索å¼ç±»åã
3. äºè§£æ¥è¯¢ä¸ä½¿ç¨çåçç¹å¾ãä¾å¦ï¼æ个索å¼å¯¹äºå«ææ´æ°æ°æ®ç±»ååæ¶è¿æ¯å¯ä¸çæé空çåæ¯çæ³ç´¢å¼ãçéç´¢å¼éç¨äºå
·æå®ä¹å®åçæ°æ®åéçåã
4. ç¡®å®åªäºç´¢å¼é项å¯å¨å建æç»´æ¤ç´¢å¼æ¶æé«æ§è½ãä¾å¦ï¼å¯¹ç°ææ个大å表å建èéç´¢å¼å°ä¼åçäº ONLINE ç´¢å¼é项ãONLINE é项å
许å¨å建索å¼æéæ°çæç´¢å¼æ¶ç»§ç»å¯¹åºç¡æ°æ®æ§è¡å¹¶åæ´»å¨ã
5. ç¡®å®ç´¢å¼çæä½³åå¨ä½ç½®ãéèéç´¢å¼å¯ä»¥ä¸åºç¡è¡¨åå¨å¨åä¸ä¸ªæ件ç»ä¸ï¼ä¹å¯ä»¥åå¨å¨ä¸åçæ件ç»ä¸ãç´¢å¼çåå¨ä½ç½®å¯éè¿æé«ç£ç I/O æ§è½æ¥æé«æ¥è¯¢æ§è½ãä¾å¦ï¼å°éèéç´¢å¼åå¨å¨è¡¨æ件ç»æå¨ç£ç以å¤çæ个ç£çä¸çä¸ä¸ªæ件ç»ä¸å¯ä»¥æé«æ§è½ï¼å 为å¯ä»¥åæ¶è¯»åå¤ä¸ªç£çã
æè
ï¼èéç´¢å¼åéèéç´¢å¼ä¹å¯ä»¥ä½¿ç¨è·¨è¶å¤ä¸ªæ件ç»çååºæ¹æ¡ãå¨ç»´æ¤æ´ä¸ªéåçå®æ´æ§æ¶ï¼ä½¿ç¨ååºå¯ä»¥å¿«éèææå°è®¿é®æ管çæ°æ®åéï¼ä»è使大å表æç´¢å¼æ´æäºç®¡çãæå
³è¯¦ç»ä¿¡æ¯ï¼è¯·åé
å·²ååºè¡¨åå·²ååºç´¢å¼ãå¨èèååºæ¶ï¼åºç¡®å®æ¯å¦åºå¯¹é½ç´¢å¼ï¼å³ï¼æ¯æå®è´¨ä¸ä¸è¡¨ç¸åçæ¹å¼è¿è¡ååºï¼è¿æ¯åç¬ååºã
# 设计索å¼ã
ç´¢å¼è®¾è®¡æ¯ä¸é¡¹å
³é®ä»»å¡ãç´¢å¼è®¾è®¡å
æ¬ç¡®å®è¦ä½¿ç¨çåï¼éæ©ç´¢å¼ç±»åï¼ä¾å¦èéæéèéï¼ï¼éæ©éå½çç´¢å¼é项ï¼ä»¥åç¡®å®æ件ç»æååºæ¹æ¡å¸ç½®ã
# ç¡®å®æä½³çå建æ¹æ³ãæç
§ä»¥ä¸æ¹æ³å建索å¼ï¼
* ä½¿ç¨ CREATE TABLE æ ALTER TABLE 对åå®ä¹ PRIMARY KEY æ UNIQUE 约æ
SQL Server æ°æ®åºå¼æèªå¨å建å¯ä¸ç´¢å¼æ¥å¼ºå¶ PRIMARY KEY æ UNIQUE 约æçå¯ä¸æ§è¦æ±ãé»è®¤æ
åµä¸ï¼å建çå¯ä¸èéç´¢å¼å¯ä»¥å¼ºå¶ PRIMARY KEY 约æï¼é¤é表ä¸å·²åå¨èéç´¢å¼ææå®äºå¯ä¸çéèéç´¢å¼ãé»è®¤æ
åµä¸ï¼å建çå¯ä¸éèéç´¢å¼å¯ä»¥å¼ºå¶ UNIQUE 约æï¼é¤éå·²æç¡®æå®å¯ä¸çèéç´¢å¼ä¸è¡¨ä¸ä¸åå¨èéç´¢å¼ã
è¿å¯ä»¥æå®ç´¢å¼é项åç´¢å¼ä½ç½®ãæ件ç»æååºæ¹æ¡ã
å建为 PRIMARY KEY æ UNIQUE 约æçä¸é¨åçç´¢å¼å°èªå¨ç»å®ä¸çº¦æå称ç¸åçå称ã
* ä½¿ç¨ CREATE INDEX è¯å¥æ SQL Server Management Studio 对象èµæºç®¡çå¨ä¸çâæ°å»ºç´¢å¼â对è¯æ¡å建ç¬ç«äºçº¦æçç´¢å¼
å¿
é¡»æå®ç´¢å¼çå称ã表以ååºç¨è¯¥ç´¢å¼çåãè¿å¯ä»¥æå®ç´¢å¼é项åç´¢å¼ä½ç½®ãæ件ç»æååºæ¹æ¡ãé»è®¤æ
åµä¸ï¼å¦ææªæå®èéæå¯ä¸é项ï¼å°å建éèéçéå¯ä¸ç´¢å¼ãè¥è¦å建çéç´¢å¼ï¼è¯·ä½¿ç¨å¯éç WHERE åå¥ã
# å建索å¼ã
è¦èèçä¸ä¸ªéè¦å ç´ æ¯å¯¹ç©ºè¡¨è¿æ¯å¯¹å
å«æ°æ®ç表å建索å¼ã对空表å建索å¼å¨å建索å¼æ¶ä¸ä¼å¯¹æ§è½äº§çä»»ä½å½±åï¼èå表ä¸æ·»å æ°æ®æ¶ï¼ä¼å¯¹æ§è½äº§çå½±åã
对大å表å建索å¼æ¶åºä»ç»è®¡åï¼è¿æ ·æä¸ä¼å½±åæ°æ®åºæ§è½ã对大å表å建索å¼çé¦éæ¹æ³æ¯å
å建èéç´¢å¼ï¼ç¶åå建任ä½éèéç´¢å¼ãå¨å¯¹ç°æ表å建索å¼æ¶ï¼è¯·èèå° ONLINE é项设置为 ONã该é项设置为 ON æ¶ï¼å°ä¸ææé¿æ表é以继ç»å¯¹åºç¡è¡¨çæ¥è¯¢ææ´æ°ã
ç®åçå建索å¼ï¼å¯éç¨å¦ä¸è¯å¥ï¼
CREATE INDEX IX_ProductVendor_VendorID
ON Purchasing.ProductVendor (VendorID, VendorName);
GO
温馨提示:答案为网友推荐,仅供参考