1 数æ®åº“设计
  è¦åœ¨è‰¯å¥½çš„SQL Server方案ä¸å®žçŽ°æœ€ä¼˜çš„æ€§èƒ½ï¼Œæœ€å…³é”®çš„æ˜¯è¦æœ‰1个很好的数æ®åº“设计方案。在实际工作ä¸ï¼Œè®¸å¤šSQL Server方案往往是由于数æ®åº“设计得ä¸å¥½å¯¼è‡´æ€§èƒ½å¾ˆå·®ã€‚所以,è¦å®žçŽ°è‰¯å¥½çš„æ•°æ®åº“设计就必须考虑这些问题。
1.1 逻辑库规范化问题
  一般æ¥è¯´ï¼Œé€»è¾‘æ•°æ®åº“设计会满足规范化的å‰3çº§æ ‡å‡†ï¼š
  1.第1规范:没有é‡å¤çš„组或多值的列。
  2.第2规范:æ¯ä¸ªéžå…³é”®å—段必须ä¾èµ–于主关键å—,ä¸èƒ½ä¾èµ–于1个组åˆå¼ä¸»å…³é”®å—çš„æŸäº›ç»„æˆéƒ¨åˆ†ã€‚
  3.第3规范:1个éžå…³é”®å—段ä¸èƒ½ä¾èµ–于å¦1个éžå…³é”®å—段。
  éµå®ˆè¿™äº›è§„åˆ™çš„è®¾è®¡ä¼šäº§ç”Ÿè¾ƒå°‘çš„åˆ—å’Œæ›´å¤šçš„è¡¨ï¼Œå› è€Œä¹Ÿå°±å‡å°‘了数æ®å†—余,也å‡å°‘了用于å˜å‚¨æ•°æ®çš„页。但表关系也许需è¦é€šè¿‡å¤æ‚çš„åˆå¹¶æ¥å¤„ç†ï¼Œè¿™æ ·ä¼šé™ä½Žç³»ç»Ÿçš„æ€§èƒ½ã€‚æŸç§ç¨‹åº¦ä¸Šçš„éžè§„范化å¯ä»¥æ”¹å–„系统的性能,éžè§„范化过程å¯ä»¥æ ¹æ®æ€§èƒ½æ–¹é¢ä¸åŒçš„考虑用多ç§ä¸åŒçš„æ–¹æ³•进行,但以下方法ç»å®žè·µéªŒè¯å¾€å¾€èƒ½æé«˜æ€§èƒ½ã€‚
  1.如果规范化设计产生了许多4路或更多路åˆå¹¶å…³ç³»ï¼Œå°±å¯ä»¥è€ƒè™‘在数æ®åº“实体(表)ä¸åŠ å…¥é‡å¤å±žæ€§(列)。
  2.å¸¸ç”¨çš„è®¡ç®—å—æ®µ(å¦‚æ€»è®¡ã€æœ€å¤§å€¼ç‰)å¯ä»¥è€ƒè™‘å˜å‚¨åˆ°æ•°æ®åº“实体ä¸ã€‚
  比如æŸä¸€ä¸ªé¡¹ç›®çš„计划管ç†ç³»ç»Ÿä¸æœ‰è®¡åˆ’è¡¨ï¼Œå…¶å—æ®µä¸ºï¼šé¡¹ç›®ç¼–å·ã€å¹´åˆè®¡åˆ’ã€äºŒæ¬¡è®¡åˆ’ã€è°ƒæ•´è®¡åˆ’ã€è¡¥åˆ—计划…,而计划总数(å¹´åˆè®¡åˆ’+二次计划+调整计划+补列计划)是用户ç»å¸¸éœ€è¦åœ¨æŸ¥è¯¢å’ŒæŠ¥è¡¨ä¸ç”¨åˆ°çš„,在表的记录é‡å¾ˆå¤§æ—¶ï¼Œæœ‰å¿…è¦æŠŠè®¡åˆ’æ€»æ•°ä½œä¸º1ä¸ªç‹¬ç«‹çš„å—æ®µåŠ å…¥åˆ°è¡¨ä¸ã€‚这里å¯ä»¥é‡‡ç”¨è§¦å‘å™¨ä»¥åœ¨å®¢æˆ·ç«¯ä¿æŒæ•°æ®çš„一致性。
  3.釿–°å®šä¹‰å®žä½“以å‡å°‘å¤–éƒ¨å±žæ€§æ•°æ®æˆ–行数æ®çš„开支。相应的éžè§„范化类型是:
  (1)把1个实体(表)分割æˆ2个表(把所有的属性分æˆ2组)ã€‚è¿™æ ·å°±æŠŠé¢‘ç¹è¢«è®¿é—®çš„æ•°æ®åŒè¾ƒå°‘被访问的数æ®åˆ†å¼€äº†ã€‚è¿™ç§æ–¹æ³•è¦æ±‚在æ¯ä¸ªè¡¨ä¸å¤åˆ¶é¦–è¦å…³é”®å—ã€‚è¿™æ ·äº§ç”Ÿçš„è®¾è®¡æœ‰åˆ©äºŽå¹¶è¡Œå¤„ç†ï¼Œå¹¶å°†äº§ç”Ÿåˆ—数较少的表。
  (2)把1个实体(表)分割æˆ2个表(把所有的行分æˆ2组)ã€‚è¿™ç§æ–¹æ³•适用于那些将包å«å¤§é‡æ•°æ®çš„实体(表)。在应用ä¸å¸¸è¦ä¿ç•™åކå²è®°å½•,但是历å²è®°å½•å¾ˆå°‘ç”¨åˆ°ã€‚å› æ¤å¯ä»¥æŠŠé¢‘ç¹è¢«è®¿é—®çš„æ•°æ®åŒè¾ƒå°‘è¢«è®¿é—®çš„åŽ†å²æ•°æ®åˆ†å¼€ã€‚而且如果数æ®è¡Œæ˜¯ä½œä¸ºå集被逻辑工作组(部门ã€é”€å”®åˆ†åŒºã€åœ°ç†åŒºåŸŸç‰)è®¿é—®çš„ï¼Œé‚£ä¹ˆè¿™ç§æ–¹æ³•也是很有好处的。
1.2 生æˆç‰©ç†æ•°æ®åº“
ã€€ã€€è¦æƒ³æ£ç¡®é€‰æ‹©åŸºæœ¬ç‰©ç†å®žçްç–略,必须懂得数æ®åº“è®¿é—®æ ¼å¼å’Œç¡¬ä»¶èµ„æºçš„æ“ä½œç‰¹ç‚¹ï¼Œä¸»è¦æ˜¯å†…å˜å’Œç£ç›˜å系统I/O。这是一个范围广泛的è¯é¢˜ï¼Œä½†ä»¥ä¸‹çš„准则å¯èƒ½ä¼šæœ‰æ‰€å¸®åŠ©ã€‚
  1.与æ¯ä¸ªè¡¨åˆ—相关的数æ®ç±»åž‹åº”è¯¥åæ˜ æ•°æ®æ‰€éœ€çš„æœ€å°å˜å‚¨ç©ºé—´ï¼Œç‰¹åˆ«æ˜¯å¯¹äºŽè¢«ç´¢å¼•的列更是如æ¤ã€‚比如能使用smallint类型就ä¸è¦ç”¨integerç±»åž‹ï¼Œè¿™æ ·ç´¢å¼•å—æ®µå¯ä»¥è¢«æ›´å¿«åœ°è¯»å–,而且å¯ä»¥åœ¨1个数æ®é¡µä¸Šæ”¾ç½®æ›´å¤šçš„æ•°æ®è¡Œï¼Œå› 而也就å‡å°‘了I/Oæ“作。
  2.把1个表放在æŸä¸ªç‰©ç†è®¾å¤‡ä¸Šï¼Œå†é€šè¿‡SQL Server段把它的ä¸åˆ†ç°‡ç´¢å¼•放在1个ä¸åŒçš„物ç†è®¾å¤‡ä¸Šï¼Œè¿™æ ·èƒ½æé«˜æ€§èƒ½ã€‚尤其是系统采用了多个智能型ç£ç›˜æŽ§åˆ¶å™¨å’Œæ•°æ®åˆ†ç¦»æŠ€æœ¯çš„æƒ…å†µä¸‹ï¼Œè¿™æ ·åšçš„å¥½å¤„æ›´åŠ æ˜Žæ˜¾ã€‚
  3.用SQL Server段把一个频ç¹ä½¿ç”¨çš„大表分割开,并放在2个å•独的智能型ç£ç›˜æŽ§åˆ¶å™¨çš„æ•°æ®åº“è®¾å¤‡ä¸Šï¼Œè¿™æ ·ä¹Ÿå¯ä»¥æé«˜æ€§èƒ½ã€‚å› ä¸ºæœ‰å¤šä¸ªç£å¤´åœ¨æŸ¥æ‰¾ï¼Œæ‰€ä»¥æ•°æ®åˆ†ç¦»ä¹Ÿèƒ½æé«˜æ€§èƒ½ã€‚
  4.用SQL Server段把文本或图åƒåˆ—的数æ®å˜æ”¾åœ¨1个å•独的物ç†è®¾å¤‡ä¸Šå¯ä»¥æé«˜æ€§èƒ½ã€‚1ä¸ªä¸“ç”¨çš„æ™ºèƒ½åž‹çš„æŽ§åˆ¶å™¨èƒ½è¿›ä¸€æ¥æé«˜æ€§èƒ½ã€‚
2 与SQL Server相关的硬件系统
  与SQL Server有关的硬件设计包括系统处ç†å™¨ã€å†…å˜ã€ç£ç›˜å系统和网络,这4个部分基本上构æˆäº†ç¡¬ä»¶å¹³å°ï¼ŒWindows NTå’ŒSQL Serverè¿è¡ŒäºŽå…¶ä¸Šã€‚
2.1 系统处ç†å™¨(CPU)
ã€€ã€€æ ¹æ®è‡ªå·±çš„具体需è¦ç¡®å®šCPU结构的过程就是估计在硬件平å°ä¸Šå 用CPU的工作é‡çš„过程。从以往的ç»éªŒçœ‹ï¼ŒCPUé…置最少应是1个80586/100处ç†å™¨ã€‚å¦‚æžœåªæœ‰2~3ä¸ªç”¨æˆ·ï¼Œè¿™å°±è¶³å¤Ÿäº†ï¼Œä½†å¦‚æžœæ‰“ç®—æ”¯æŒæ›´å¤šçš„用户和关键应用,推è采用Pentium Pro或PⅡ级CPU。
2.2 内å˜(RAM)
  为SQL Server方案确定åˆé€‚的内å˜è®¾ç½®å¯¹äºŽå®žçŽ°è‰¯å¥½çš„æ€§èƒ½æ˜¯è‡³å…³é‡è¦çš„。SQL Server用内å˜åšè¿‡ç¨‹ç¼“å˜ã€æ•°æ®å’Œç´¢å¼•项缓å˜ã€é™æ€æœåŠ¡å™¨å¼€æ”¯å’Œè®¾ç½®å¼€æ”¯ã€‚SQL Server最多能利用2GB虚拟内å˜ï¼Œè¿™ä¹Ÿæ˜¯æœ€å¤§çš„设置值。还有一点必须考虑的是Windows NT和它的所有相关的æœåŠ¡ä¹Ÿè¦å 用内å˜ã€‚
  Windows NT为æ¯ä¸ªWIN32åº”ç”¨ç¨‹åºæä¾›äº†4GB的虚拟地å€ç©ºé—´ã€‚这个虚拟地å€ç©ºé—´ç”±Windows NT虚拟内å˜ç®¡ç†å™¨(VMM)æ˜ å°„åˆ°ç‰©ç†å†…å˜ä¸Šï¼Œåœ¨æŸäº›ç¡¬ä»¶å¹³å°ä¸Šå¯ä»¥è¾¾åˆ°4GB。SQL Server应用程åºåªçŸ¥é“虚拟地å€ï¼Œæ‰€ä»¥ä¸èƒ½ç›´æŽ¥è®¿é—®ç‰©ç†å†…å˜ï¼Œè¿™ä¸ªè®¿é—®æ˜¯ç”±VMM控制的。Windows NTå…许产生超出å¯ç”¨çš„物ç†å†…å˜çš„虚拟地å€ç©ºé—´ï¼Œè¿™æ ·å½“ç»™SQL Server分é…的虚拟内å˜å¤šäºŽå¯ç”¨çš„物ç†å†…å˜æ—¶ï¼Œä¼šé™ä½ŽSQL Server的性能。
  这些地å€ç©ºé—´æ˜¯ä¸“门为SQL Server系统设置的,所以如果在åŒä¸€ç¡¬ä»¶å¹³å°ä¸Šè¿˜æœ‰å…¶å®ƒè½¯ä»¶(如文件和打å°å…±äº«ï¼Œåº”ç”¨ç¨‹åºæœåŠ¡ç‰)在è¿è¡Œï¼Œé‚£ä¹ˆåº”该考虑到它们也å 用一部分内å˜ã€‚一般æ¥è¯´ç¡¬ä»¶å¹³å°è‡³å°‘è¦é…ç½®32MB的内å˜ï¼Œå…¶ä¸ï¼ŒWindows NT至少è¦å 用16MB。1个简å•的法则是,给æ¯ä¸€ä¸ªå¹¶å‘çš„ç”¨æˆ·å¢žåŠ 100KB的内å˜ã€‚例如,如果有100个并å‘的用户,则至少需è¦32MB+100用户*100KBï¼42MB内å˜ï¼Œå®žé™…的使用数é‡è¿˜éœ€è¦æ ¹æ®è¿è¡Œçš„实际情况调整。å¯ä»¥è¯´ï¼Œæé«˜å†…å˜æ˜¯æé«˜ç³»ç»Ÿæ€§èƒ½çš„æœ€ç»æµŽçš„途径。
2.3 ç£ç›˜å系统
  设计1个好的ç£ç›˜I/O系统是实现良好的SQL Server方案的一个很é‡è¦çš„æ–¹é¢ã€‚这里讨论的ç£ç›˜å系统至少有1个ç£ç›˜æŽ§åˆ¶è®¾å¤‡å’Œ1个或多个硬盘å•元,还有对ç£ç›˜è®¾ç½®å’Œæ–‡ä»¶ç³»ç»Ÿçš„考虑。智能型SCSI-2ç£ç›˜æŽ§åˆ¶å™¨æˆ–ç£ç›˜ç»„控制器是ä¸é”™çš„选择,其特点如下:
  (1)控制器高速缓å˜ã€‚
  (2)总线主æ¿ä¸Šæœ‰å¤„ç†å™¨ï¼Œå¯ä»¥å‡å°‘对系统CPUçš„ä¸æ–。
  (3)异æ¥è¯»å†™æ”¯æŒã€‚
  (4)32ä½RAID支æŒã€‚
  (5)快速SCSI—2驱动。
  (6)è¶…å‰è¯»é«˜é€Ÿç¼“å˜(至少1个ç£é“)。
3 检索ç–ç•¥
  在精心选择了硬件平å°ï¼Œåˆå®žçŽ°äº†1个良好的数æ®åº“方案,并且具备了用户需求和应用方é¢çš„知识åŽï¼ŒçŽ°åœ¨åº”è¯¥è®¾è®¡æŸ¥è¯¢å’Œç´¢å¼•äº†ã€‚æœ‰2个方é¢å¯¹äºŽåœ¨SQL Server上å–得良好的查询和索引性能是å分é‡è¦çš„,第1æ˜¯æ ¹æ®SQL Server优化器方é¢çš„çŸ¥è¯†ç”ŸæˆæŸ¥è¯¢å’Œç´¢å¼•;第2是利用SQL Serverçš„æ€§èƒ½ç‰¹ç‚¹ï¼ŒåŠ å¼ºæ•°æ®è®¿é—®æ“作。
3.1 SQL Server优化器
  Microsoft SQL Serveræ•°æ®åº“å†…æ ¸ç”¨1个基于费用的查询优化器自动优化å‘SQLæäº¤çš„æ•°æ®æŸ¥è¯¢æ“ä½œã€‚æ•°æ®æ“作查询是指支æŒSQL关键å—WHERE或HAVING的查询,如SELECTã€DELETEå’ŒUPDATEã€‚åŸºäºŽè´¹ç”¨çš„æŸ¥è¯¢ä¼˜åŒ–å™¨æ ¹æ®ç»Ÿè®¡ä¿¡æ¯äº§ç”Ÿå
å¥çš„费用估算。
  了解优化器数æ®å¤„ç†è¿‡ç¨‹çš„ç®€å•æ–¹æ³•是检测SHOWPLAN命令的输出结果。如果用基于å—符的工具(例如isql),å¯ä»¥é€šè¿‡é”®å…¥SHOW SHOWPLAN ONæ¥å¾—到SHOWPLAN命令的输出。如果使用图形化查询,比如SQL Enterprise Managerä¸çš„æŸ¥è¯¢å·¥å…·æˆ–isql/w,å¯ä»¥è®¾å®šé…ç½®é€‰é¡¹æ¥æä¾›è¿™ä¸€ä¿¡æ¯ã€‚
  SQL Server的优化通过3个阶段完æˆï¼šæŸ¥è¯¢åˆ†æžã€ç´¢å¼•选择ã€åˆå¹¶é€‰æ‹©ã€‚
  1.查询分æž
  在查询分æžé˜¶æ®µï¼ŒSQL Server优化器查看æ¯ä¸€ä¸ªç”±æ£è§„æŸ¥è¯¢æ ‘ä»£è¡¨çš„åå¥ï¼Œå¹¶åˆ¤æ–它是å¦èƒ½è¢«ä¼˜åŒ–。SQL Server一般会尽é‡ä¼˜åŒ–那些é™åˆ¶æ‰«æçš„åå¥ã€‚例如,æœç´¢å’Œ/或åˆå¹¶åå¥ã€‚ä½†æ˜¯ä¸æ˜¯æ‰€æœ‰åˆæ³•çš„SQLè¯æ³•都å¯ä»¥åˆ†æˆå¯ä¼˜åŒ–çš„åå¥ï¼Œå¦‚嫿œ‰SQLä¸ç‰å…³ç³»ç¬¦â€œ<>â€çš„åå¥ã€‚å› ä¸ºâ€œ<>â€æ˜¯1个排斥性的æ“ä½œç¬¦ï¼Œè€Œä¸æ˜¯1个包括性的æ“ä½œç¬¦ï¼Œæ‰€åœ¨æ‰«ææ•´ä¸ªè¡¨ä¹‹å‰æ— 法确定åå¥çš„选择范围会有多大。当1个关系型查询ä¸å«æœ‰ä¸å¯ä¼˜åŒ–çš„å奿—¶ï¼Œæ‰§è¡Œè®¡åˆ’ç”¨è¡¨æ‰«ææ¥è®¿é—®æŸ¥è¯¢çš„è¿™ä¸ªéƒ¨åˆ†ï¼Œå¯¹äºŽæŸ¥è¯¢æ ‘ä¸å¯ä¼˜åŒ–çš„SQL Serveråå¥ï¼Œåˆ™ç”±ä¼˜åŒ–器执行索引选择。
  2.索引选择
  对于æ¯ä¸ªå¯ä¼˜åŒ–çš„åå¥ï¼Œä¼˜åŒ–器都查看数æ®åº“ç³»ç»Ÿè¡¨ï¼Œä»¥ç¡®å®šæ˜¯å¦æœ‰ç›¸å…³çš„索引能用于访问数æ®ã€‚åªæœ‰å½“索引ä¸çš„列的1个å‰ç¼€ä¸ŽæŸ¥è¯¢åå¥ä¸çš„åˆ—å®Œå…¨åŒ¹é…æ—¶ï¼Œè¿™ä¸ªç´¢å¼•æ‰è¢«è®¤ä¸ºæ˜¯æœ‰ç”¨çš„ã€‚å› ä¸ºç´¢å¼•æ˜¯æ ¹æ®åˆ—çš„é¡ºåºæž„é€ çš„ï¼Œæ‰€ä»¥è¦æ±‚åŒ¹é…æ˜¯ç²¾ç¡®çš„匹é…。对于分簇索引,原æ¥çš„æ•°æ®ä¹Ÿæ˜¯æ ¹æ®ç´¢å¼•åˆ—é¡ºåºæŽ’åºçš„。想用索引的次è¦åˆ—访问数æ®ï¼Œå°±åƒæƒ³åœ¨ç”µè¯æœ¬ä¸æŸ¥æ‰¾æ‰€æœ‰å§“为æŸä¸ªå§“æ°çš„æ¡ç›®ä¸€æ ·ï¼ŒæŽ’åºåŸºæœ¬ä¸Šæ²¡æœ‰ä»€ä¹ˆç”¨ï¼Œå› ä¸ºä½ è¿˜æ˜¯å¾—æŸ¥çœ‹æ¯ä¸€è¡Œä»¥ç¡®å®šå®ƒæ˜¯å¦ç¬¦åˆæ¡ä»¶ã€‚如果1个å奿œ‰å¯ç”¨çš„索引,那么优化器就会为它确定选择性。
  所以在设计过程ä¸ï¼Œè¦æ ¹æ®æŸ¥è¯¢è®¾è®¡å‡†åˆ™ä»”细检查所有的查询,以查询的优化特点为基础设计索引。
  (1)比较窄的索引具有比较高的效率。对于比较窄的索引æ¥è¯´ï¼Œæ¯é¡µä¸Šèƒ½å˜æ”¾è¾ƒå¤šçš„索引行,而且索引的级别也较少。所以,缓å˜ä¸èƒ½æ”¾ç½®æ›´å¤šçš„ç´¢å¼•é¡µï¼Œè¿™æ ·ä¹Ÿå‡å°‘了I/Oæ“作。
  (2)SQL Server优化器能分æžå¤§é‡çš„索引和åˆå¹¶å¯èƒ½æ€§ã€‚所以与较少的宽索引相比,较多的窄索引能å‘优化器æä¾›æ›´å¤šçš„选择。但是ä¸è¦ä¿ç•™ä¸å¿…è¦çš„ç´¢å¼•ï¼Œå› ä¸ºå®ƒä»¬å°†å¢žåŠ å˜å‚¨å’Œç»´æŠ¤çš„开支。对于å¤åˆç´¢å¼•ã€ç»„åˆç´¢å¼•或多列索引,SQL Server优化器åªä¿ç•™æœ€é‡è¦çš„列的分布统计信æ¯ï¼Œè¿™æ ·ï¼Œç´¢å¼•的第1列应该有很大的选择性。
  (3)表上的索引过多会影å“UPDATEã€INSERTå’ŒDELETEçš„æ€§èƒ½ï¼Œå› ä¸ºæ‰€æœ‰çš„ç´¢å¼•éƒ½å¿…é¡»åšç›¸åº”的调整。å¦å¤–,所有的分页æ“作都被记录在日志ä¸ï¼Œè¿™ä¹Ÿä¼šå¢žåŠ I/Oæ“作。  
  (4)对1个ç»å¸¸è¢«æ›´æ–°çš„列建立索引,会严é‡å½±å“性能。
  (5)由于å˜å‚¨å¼€æ”¯å’ŒI/Oæ“作方é¢çš„åŽŸå› ï¼Œè¾ƒå°çš„自组索引比较大的索引性能更好一些。但它的缺点是è¦ç»´æŠ¤è‡ªç»„的列。
  (6)å°½é‡åˆ†æžå‡ºæ¯ä¸€ä¸ªé‡è¦æŸ¥è¯¢çš„ä½¿ç”¨é¢‘åº¦ï¼Œè¿™æ ·å¯ä»¥æ‰¾å‡ºä½¿ç”¨æœ€å¤šçš„索引,然åŽå¯ä»¥å…ˆå¯¹è¿™äº›ç´¢å¼•进行适当的优化。
  (7)查询ä¸çš„WHEREåå¥ä¸çš„任何列都很å¯èƒ½æ˜¯ä¸ªç´¢å¼•åˆ—ï¼Œå› ä¸ºä¼˜åŒ–å™¨é‡ç‚¹å¤„ç†è¿™ä¸ªåå¥ã€‚
  (8)对å°äºŽ1个范围的å°åž‹è¡¨è¿›è¡Œç´¢å¼•是ä¸åˆ’ç®—çš„ï¼Œå› ä¸ºå¯¹äºŽå°è¡¨æ¥è¯´è¡¨æ‰«æå¾€å¾€æ›´å¿«è€Œä¸”费用低。
  (9)与“ORDER BYâ€æˆ–“GROUP BYâ€ä¸€èµ·ä½¿ç”¨çš„列一般适于åšåˆ†æ—索引。如果“ORDER BYâ€å‘½ä»¤ä¸ç”¨åˆ°çš„列上有分簇索引,那么就ä¸ä¼šå†ç”Ÿæˆ1ä¸ªå·¥ä½œè¡¨äº†ï¼Œå› ä¸ºè¡Œå·²ç»æŽ’åºäº†ã€‚“GROUP BYâ€å‘½ä»¤åˆ™ä¸€å®šäº§ç”Ÿ1个工作表。
  (10)分簇索引ä¸åº”è¯¥æž„é€ åœ¨ç»å¸¸å˜åŒ–çš„åˆ—ä¸Šï¼Œå› ä¸ºè¿™ä¼šå¼•èµ·æ•´è¡Œçš„ç§»åŠ¨ã€‚åœ¨å®žçŽ°å¤§åž‹äº¤æ˜“å¤„ç†ç³»ç»Ÿæ—¶ï¼Œå°¤å…¶è¦æ³¨æ„è¿™ä¸€ç‚¹ï¼Œå› ä¸ºè¿™äº›ç³»ç»Ÿä¸æ•°æ®å¾€å¾€æ˜¯é¢‘ç¹å˜åŒ–的。
  3.åˆå¹¶é€‰æ‹©
  当索引选择结æŸï¼Œå¹¶ä¸”所有的åå¥éƒ½æœ‰äº†ä¸€ä¸ªåŸºäºŽå®ƒä»¬çš„访问计划的处ç†è´¹ç”¨æ—¶ï¼Œä¼˜åŒ–器开始执行åˆå¹¶é€‰æ‹©ã€‚åˆå¹¶é€‰æ‹©è¢«ç”¨æ¥æ‰¾å‡ºä¸€ä¸ªç”¨äºŽåˆå¹¶åå¥è®¿é—®è®¡åˆ’的有效顺åºã€‚为了åšåˆ°è¿™ä¸€ç‚¹ï¼Œä¼˜åŒ–器比较åå¥çš„ä¸åŒæŽ’åºï¼Œç„¶åŽé€‰å‡ºä»Žç‰©ç†ç£ç›˜I/O的角度看处ç†è´¹ç”¨æœ€ä½Žçš„åˆå¹¶è®¡åˆ’ã€‚å› ä¸ºåå¥ç»„åˆçš„æ•°é‡ä¼šéšç€æŸ¥è¯¢çš„夿‚度æžå¿«åœ°å¢žé•¿ï¼ŒSQL ServeræŸ¥è¯¢ä¼˜åŒ–å™¨ä½¿ç”¨æ ‘å‰ªæžæŠ€æœ¯æ¥å°½é‡å‡å°‘这些比较所带æ¥çš„开支。当这个åˆå¹¶é€‰æ‹©é˜¶æ®µç»“æŸæ—¶ï¼ŒSQL Server查询优化器已ç»ç”Ÿæˆäº†1个基于费用的查询执行计划,这个计划充分利用了å¯ç”¨çš„索引,并以最å°çš„系统开支和良好的执行性能访问原æ¥çš„æ•°æ®ã€‚
3.2 高效的查询选择
  从以上查询优化的3个阶段ä¸éš¾çœ‹å‡ºï¼Œè®¾è®¡å‡ºç‰©ç†I/O和逻辑I/O最少的方案并掌æ¡å¥½å¤„ç†å™¨æ—¶é—´å’ŒI/O时间的平衡,是高效查询设计的主è¦ç›®æ ‡ã€‚ä¹Ÿå°±æ˜¯è¯´ï¼Œå¸Œæœ›è®¾è®¡å‡ºè¿™æ ·çš„æŸ¥è¯¢ï¼šå……åˆ†åˆ©ç”¨ç´¢å¼•ã€ç£ç›˜è¯»å†™æœ€å°‘ã€æœ€é«˜æ•ˆåœ°åˆ©ç”¨äº†å†…å˜å’ŒCPU资æºã€‚
  以下建议是从SQL Server优化器的优化ç–ç•¥ä¸æ€»ç»“出æ¥çš„,对于设计高效的查询是很有帮助的。
  1.如果有独特的索引,那么带有“ï¼â€æ“作符的WHEREå奿€§èƒ½æœ€å¥½ï¼Œå…¶æ¬¡æ˜¯å°é—的区间(范围),å†å…¶æ¬¡æ˜¯å¼€æ”¾çš„区间。
  2.从数æ®åº“è®¿é—®çš„è§’åº¦çœ‹ï¼Œå«æœ‰ä¸è¿žç»è¿žæŽ¥è¯(ORå’ŒIN)çš„WHEREåå¥ä¸€èˆ¬æ¥è¯´æ€§èƒ½ä¸ä¼šå¤ªå¥½ã€‚所以,优化器å¯èƒ½ä¼šé‡‡ç”¨Rç–略,这ç§ç–略会生æˆ1个工作表,其ä¸å«æœ‰æ¯ä¸ªå¯èƒ½åŒ¹é…çš„æ‰§è¡Œçš„æ ‡è¯†ç¬¦ï¼Œä¼˜åŒ–å™¨æŠŠè¿™äº›è¡Œæ ‡å¿—ç¬¦(页å·å’Œè¡Œå·)çœ‹åšæ˜¯æŒ‡å‘1个表ä¸åŒ¹é…的行的“动æ€ç´¢å¼•â€ã€‚优化器åªéœ€æ‰«æå·¥ä½œè¡¨ï¼Œå–出æ¯ä¸€ä¸ªè¡Œæ ‡å¿—符,å†ä»Žæ•°æ®è¡¨ä¸å–得相应的行,所以Rç–略的代价是生æˆå·¥ä½œè¡¨ã€‚
  3.包å«NOTã€<>ã€æˆ–! =çš„WHEREåå¥å¯¹äºŽä¼˜åŒ–器的索引选择æ¥è¯´æ²¡æœ‰ä»€ä¹ˆç”¨å¤„ã€‚å› ä¸ºè¿™æ ·çš„å奿˜¯æŽ’æ–¥æ€§çš„ï¼Œè€Œä¸æ˜¯åŒ…æ‹¬æ€§çš„ï¼Œæ‰€ä»¥åœ¨æ‰«ææ•´ä¸ªåŽŸæ¥æ•°æ®è¡¨ä¹‹å‰æ— 法确定åå¥çš„选择性。
  4.é™åˆ¶æ•°æ®è½¬æ¢å’Œä¸²æ“作,优化器一般ä¸ä¼šæ ¹æ®WHEREåå¥ä¸çš„表达å¼å’Œæ•°æ®è½¬æ¢å¼ç”Ÿæˆç´¢å¼•选择。例如:
  paycheck * 12>36000 or substring(lastname,1,1)=“Lâ€
  如果该表建立了针对paycheckå’Œlastname的索引,就ä¸èƒ½åˆ©ç”¨ç´¢å¼•进行优化,å¯ä»¥æ”¹å†™ä¸Šé¢çš„æ¡ä»¶è¡¨è¾¾å¼ä¸ºï¼š
  paycheck<36000/12 or lastname like “L%â€
  5.WHEREåå¥ä¸çš„æœ¬åœ°å˜é‡è¢«è®¤ä¸ºæ˜¯ä¸è¢«ä¼˜åŒ–器知é“å’Œè€ƒè™‘çš„ï¼Œä¾‹å¤–çš„æƒ…å†µæ˜¯å®šä¹‰ä¸ºå‚¨å¤‡è¿‡ç¨‹è¾“å…¥å‚æ•°çš„å˜é‡ã€‚
  6.如果没有包å«åˆå¹¶åå¥çš„ç´¢å¼•ï¼Œé‚£ä¹ˆä¼˜åŒ–å™¨æž„é€ 1ä¸ªå·¥ä½œè¡¨ä»¥å˜æ”¾åˆå¹¶ä¸æœ€å°çš„表ä¸çš„行。然åŽå†åœ¨è¿™ä¸ªè¡¨ä¸Šæž„é€ 1个分簇索引以完æˆä¸€ä¸ªé«˜æ•ˆçš„åˆå¹¶ã€‚è¿™ç§ä½œæ³•的代价是工作表的生æˆå’ŒéšåŽçš„分æ—索引的生æˆï¼Œè¿™ä¸ªè¿‡ç¨‹å«REFORMATTING。所以应该注æ„RAM䏿ˆ–ç£ç›˜ä¸Šçš„æ•°æ®åº“tempdb的大å°(除了SELECT INTOè¯å¥)。å¦å¤–,如果这些类型的æ“作是很常è§çš„,那么把tempdb放在RAMä¸å¯¹äºŽæé«˜æ€§èƒ½æ˜¯å¾ˆæœ‰å¥½å¤„的。
4 性能优化的其他考虑
  上é¢åˆ—出了影å“SQL Server的一些主è¦å› ç´ ï¼Œå®žé™…ä¸Šè¿œä¸æ¢è¿™äº›ã€‚æ“作系统的影å“也很大,在Windows NT下,文件系统的选择ã€ç½‘络åè®®ã€å¼€å¯çš„æœåŠ¡ã€SQL Server的优先级ç‰é€‰é¡¹ä¹Ÿä¸åŒç¨‹åº¦ä¸Šå½±å“了SQL Server的性能。
ã€€ã€€å½±å“æ€§èƒ½çš„å› ç´ æ˜¯å¦‚æ¤çš„多,而应用åˆå„ä¸ç›¸åŒï¼Œæ‰¾å‡º1个通用的优化方案是ä¸çŽ°å®žçš„ï¼Œåœ¨ç³»ç»Ÿå¼€å‘和维护的过程ä¸å¿…须针对è¿è¡Œçš„æƒ…å†µï¼Œä¸æ–åŠ ä»¥è°ƒæ•´ã€‚äº‹å®žä¸Šï¼Œç»å¤§éƒ¨åˆ†çš„优化和调整工作是在与客户端独立的æœåŠ¡å™¨ä¸Šè¿›è¡Œçš„ï¼Œå› æ¤ä¹Ÿæ˜¯çŽ°å®žå¯è¡Œ
的。