- 浏览: 613911 次
- 性别:
- 来自: 太原
文章分类
- 全部博客 (240)
- 程序员数学/线性代数(Linear Algebra) (2)
- 程序员数学/微积分(Calculus) (6)
- 机器学习(Machine Learning) (5)
- JAVA SE (63)
- JAVA EE (14)
- 数据库技术 (26)
- struts (4)
- 软件设计/设计模式 (0)
- ibatis (2)
- XML (4)
- 领域建模 (0)
- 数据资源共享 (1)
- 软件工程 (11)
- 技术以外 (6)
- 面向对象 (2)
- 科学数据共享 (1)
- 资源 (7)
- WEB2.0 (11)
- 电子商务 (10)
- 算法、数据结构、数学 (10)
- LAMP (1)
- 杂谈 (12)
- C语言 (7)
- 程序设计思想 (3)
- 读书和笔记 (1)
- 生活 健身 养生 (5)
- WEB UI (2)
- eclipse (2)
- 项目管理 (7)
- oracle (5)
- linux (1)
- webGIS (6)
最新评论
-
TimePower:
OK~终于明白了~~
参数(parameter)和属性(Attribute)的区别 -
OnTheRoad_lee:
不错,正式我想要的东西,一直不明白序列化是什么?有什么用?至此 ...
我对Java Serializable(序列化)的理解和总结 -
EchoZhouYou:
好久不上这,找这本书时发现这一篇,特意登录来赞一下
《程序设计语言——实践之路》读后感 -
yong7356:
学习一下Serializable
我对Java Serializable(序列化)的理解和总结 -
dengjm_2012:
写得不错!
我对Java Serializable(序列化)的理解和总结
SQL Server的索引对用户和T-SQL开发者来说几乎是透明的。除非用户使用表提示(table hints)来强制优化器使用某个具体的索引,否则查询中的索引不能被具体指定。通常情况下,基于索引键直方图的值,SQL Server的基于代价的优化器从I/O角度会选择代价最小的索引。
Chapter35会详细讲述优化器如何评估I/O,并决定采用最有效的查询计划。本节主要讲述一些创建有用索引的主要的指导原则,使得优化器能够有效地使用这些索引。
设计索引的一些通用的指南包括以下几点:
聚集索引指示(Cluster Index Indications)
借助聚集索引来搜索行总比借助非聚集索引来搜索行快主要有两个原因。原因一是聚集索引只包含了一个指向页的指针而不是指向单个数据行的指针;所以,一个聚集索引比非聚集索引更紧凑。因为聚集索引更小并且不需要额外的书签查找来发现匹配的行,而且比相似定义的非聚集索引可通过更少的页的读操作来发现行。第二个原因是聚集索引的表中的数据物理上就是按照聚集键来存放,搜索重复值或者聚集键的一个范围值更快;行之间相互邻接并且SQL Server能简单定位第一个满足条件的行然后顺序搜索直到发现最后一个满足条件的行。然而,每个表上只能创建一个聚集索引,你必须明智地选择在哪个列或哪些列上来定义聚集索引。
如果你要求在一个表上只创建一个单独的索引,那创建聚集索引有很大优势;则结果就是在修改、插入和删除时的负担将比创建非聚集索引的负担要小的多。
默认情况下,表中的主键将被定义为聚集的唯一索引。在大多数应用中,表上的主键列总是以单行查找的方式来检索。对于单行查找,一个非聚集索引通常比一个相似的聚集索引花费更少的I/O代价。你或者你的用户真正注意过读三页去检索单个数据行和四到六页去检索单个数据行之间的区别吗?不一定。然而,如果你执行一个范围检索,比如查找last name,你将会注意到扫描表的10%和使用全表扫描来发现行之间的区别吗?一定会的。
根据这种思想,你可能想为你的主键创建一个唯一的非聚集索引,并选择其他候选列做为你的聚集索引。下面就是一些指南,可以帮助你来选择聚集索引的潜在的候选者:
选择聚集索引键时应满足四个特点:
当你考虑聚集索引列时,你可能想尝试在相对静态的列上创建聚集索引,来最小化由于索引列的修改而引起的数据行重新排序。任何时间当聚集索引的键值改变了,所有把聚集索引作为书签的非聚集索引都需要被修改。
尽量避免在以单调形式插入的顺序的键字段上创建聚集索引,比如一个标识列(identity column)。这会在表的末尾创建一个"热点"(hot spot),结果会在表和索引的的末尾导致锁竞争和死锁。另外,聚集索引也不会重用以前数据页中的空间,因为所有新的行都排在数据表的末尾。这种情况造成了空间的浪费和你的表的增长会比预期的要大。一般的建议是,尽量在一个有某种随机分布的数据值上建立索引。尽量选择一个使得插入和修改活动散布在整个表的聚集键。一些能够使得数据随机化的候选聚集索引包括下列:
一个随机hash key(通常只当没有其他实际列可以作为好的候选的聚集索引时才使用)
在整个表上散布你的数据有助于最小化页竞争,同时也提供了更有效的空间利用。如果序列键是你的主键,你仍能用一个唯一、非聚集索引来提供一个访问路径并维护主键的唯一性。
因为你只能以一种方式对表上的数据进行物理排序,你只能有一个聚集索引。你想索引的其它列只能被定义为非聚集索引。
非聚集索引(Noclustered Index Indications)
SQL Server 2000允许你在一个表上最多创建249个非聚集索引。直到表变得非常巨大,一个非聚集索引实际所占用的空间与日益增长的访问性能相比是微不足道的。然而,时刻牢记:随着你在系统添加更多索引,数据修改语句由于索引性能的负担会变得更慢。
当定义非聚集索引时,你也想在选择性高的列上定义索引(也就是,具有低密度值的列)这样它们能被优化器来使用。一个非聚集索引中的大量重复值经常使得使用非聚集索引比表扫描代价更高(按照I/O)。让我们一起来看一个假设的例子:
假设你在范围内有1,000,000行;这些1,000,000行随机分散在整个表中。尽管索引叶级拥有全部的有序索引行,但在最坏情况下,一次读一个数据行也将要求一个书签查找。
这样,在最坏情况下使用非聚集索引来进行范围检索的I/O估计如下:
假如你的表上没有聚集索引,那书签仅仅是一个包括页和行的指针,当发现匹配的数据行时需要读取一个数据页。假如范围内有1,000,000行,当该表没有聚集索引时,借助非聚集索引的最坏情况的估计是:
如果表中有聚集索引,书签就是一个代表数据行的聚集索引键,用书签来查找匹配的行要求搜索聚集索引树来定位数据行。假设聚集索引有两级非叶子节点,它将需要读取三页来在数据页上查找每个满足条件的行。如果范围内有1,000,000行,那么借助聚集索引的非聚集索引来查找数据,在最坏情况下它的代价估计如下:
把每种情况与表扫描相对比。如果整个表占用了50,000页,那么一个全表扫描将只花费50,000 I/O。所以,在这个例子中,一个表扫描实际将比用非聚集索引更有效。
下面的指南帮助你识别非聚集索引的潜在的候选者。
一般情况下,非聚集索引对单行查找(single-row lookup),连接(join),有高选择性的列的查询,小范围检索的查询有用。当你考虑非聚集索引的设计时也不要忽略了覆盖索引的优点,下节将会讲到。
索引覆盖(Index Covering)
索引覆盖是这样一种情况,查询中的select 和where子句中所需要的信息都能在非聚集索引中找到。因为非聚集索引包含了一个对应于表中每个数据行的一个叶子行,SQL Server能从非聚集索引的叶子行来满足查询。这导致了数据检索的更快,因为所有的信息能从索引页中直接获得,并且避免了SQL Server查找数据页。
因为非聚集索引的叶子页都连接在一起,索引的叶级可以像表中的数据页一样进行扫描,因为页级行都典型比数据行要小,一个覆盖了查询的非聚集索引将比同样列的聚集索引更快,因为需要读取的页数要更少。
在下面的例子中,quthors表中的关于au_lname 和au_fname的非聚集索引将覆盖查询,因为结果中的列和SARG都能从索引中提取出来:
其他使用聚合函数(MIN AVG SUM COUNT)的查询或者仅仅检查是否存在的查询也能从索引覆盖中获益。下面是一些能够利用索引覆盖优点的查询:
你可能会奇怪最后一个查询,它甚至没有一个具体的SARG,怎么还能使用索引。SQL Server知道非聚集索引的特性,一个非聚集索引为表中的每行数据都包含了一行;它能够简单的计算任何一个非聚集索引的行数,而不需要扫描整个表。对最后一个查询,SQL Server选择最小的非聚集索引——也就是,具有最少的叶子页的索引。
向非聚集索引添加列使得发生索引覆盖是一种提高查询响应时间的常见方法。考虑下面的查询:
如果你仅在price列上创建索引,SQL Server能发现满足price在该范围的索引中的行,但是它还需要访问数据行来检索royalty。范围中有100行,最坏情况下检索数据所花费的IO代价计算如下:
如果royalty列添加到了price列索引中了,索引能被扫描来检索结果,而不是进行书签查找,这样具有更快的查询响应。使用索引覆盖的IO代价将只是:
正如第33章讨论的那样,当在一个表上创建了 一个聚集索引,聚集键会被所有的非聚集索引引用,作为书签来定位实际的数据行。聚集键实际就是一些列,它们构成了聚集索引和它们的数据值。这种特性有时也能导致索引覆盖。
例如,假设suthors表在au_lname au_fname列上建立聚集索引,并有一个定义在au_id的非聚集索引。非聚集索引的每行都包含了与数据行对应的au_lname au_fname聚集键值。因为这个原因,下面查询将被非聚集索引覆盖:
Chapter35会详细讲述优化器如何评估I/O,并决定采用最有效的查询计划。本节主要讲述一些创建有用索引的主要的指导原则,使得优化器能够有效地使用这些索引。
设计索引的一些通用的指南包括以下几点:
- 对于组合索引,尽量保持索引的越靠左边的列越具有高的选择性。索引中的第一列应该最具有唯一性(如果可能),并且索引列的顺序总体上应该具有从高到低的唯一性。然而,记住如果索引的第一列没有在SARG或join子句中出现,那么选择性将不会有任何帮助。为了确保索引能够被大多数查询使用,第一列应该是查询中最常用的列。
- 确保join中使用的列具有索引。如果join中的列上没有索引,Join的处理将是低效的。记住:一个PRIMARY KEY约束将自动会在一个列上创建索引,但是FOREIGN KEY约束不会的。如果你的查询通常在表的primary Key 和foreign key之间进行join操作,那么你将会在foreign key上创建索引。
- 为你的最关键查询和事务来调整索引。你不能为每个可能的查询都创建索引。然而,如果你能识别你的关键和最常用的查询,并为它们创建索引,那么你的应用将运行地更好。SQL Profile是一个识别你的最常用查询的有用工具。SQL Profie也能识别那些运行慢的查询。
- 避免列上的索引具有低选择性。优化器将不可能使用这些索引,它们只是占有些空间并且在插入、删除、修改时增加了以一些不必的负担而已。当索引能覆盖一个查询则是一个例外。索引覆盖将在后面详细介绍。
- 小心选择你的聚集和非聚集索引。接下来的两个小节将讨论给出一些选择聚集和非聚集索引的技巧和指南。这些都基于对列上包含的数据和该列上所执行的查询类型来给出的。
聚集索引指示(Cluster Index Indications)
借助聚集索引来搜索行总比借助非聚集索引来搜索行快主要有两个原因。原因一是聚集索引只包含了一个指向页的指针而不是指向单个数据行的指针;所以,一个聚集索引比非聚集索引更紧凑。因为聚集索引更小并且不需要额外的书签查找来发现匹配的行,而且比相似定义的非聚集索引可通过更少的页的读操作来发现行。第二个原因是聚集索引的表中的数据物理上就是按照聚集键来存放,搜索重复值或者聚集键的一个范围值更快;行之间相互邻接并且SQL Server能简单定位第一个满足条件的行然后顺序搜索直到发现最后一个满足条件的行。然而,每个表上只能创建一个聚集索引,你必须明智地选择在哪个列或哪些列上来定义聚集索引。
如果你要求在一个表上只创建一个单独的索引,那创建聚集索引有很大优势;则结果就是在修改、插入和删除时的负担将比创建非聚集索引的负担要小的多。
默认情况下,表中的主键将被定义为聚集的唯一索引。在大多数应用中,表上的主键列总是以单行查找的方式来检索。对于单行查找,一个非聚集索引通常比一个相似的聚集索引花费更少的I/O代价。你或者你的用户真正注意过读三页去检索单个数据行和四到六页去检索单个数据行之间的区别吗?不一定。然而,如果你执行一个范围检索,比如查找last name,你将会注意到扫描表的10%和使用全表扫描来发现行之间的区别吗?一定会的。
根据这种思想,你可能想为你的主键创建一个唯一的非聚集索引,并选择其他候选列做为你的聚集索引。下面就是一些指南,可以帮助你来选择聚集索引的潜在的候选者:
- 一些频繁搜索的具有许多重复值的列,比如, where last_name = 'Smith' 因为数据物理上是有序的,所有的重复值将聚集在一起。任何一个对该键值的查询将会用最小的I/O来发现所有的值。SQL Server 定位第一个满足SARG的行,然后按顺序扫描数据直到找到最后一个满足SARG的行。
- 经常被ORDER BY子句指定的列。
- 经常按照一个范围值进行查询的列,例如,Where price between ¥10 and ¥20 使用聚集索引首先定位第一个满足范围条件的行。因为表中的行按顺序排列,SQL Server能简单按顺序扫描数据页直到最后个满足范围的条件的行。当满足条件的结果集非常大,从执行的逻辑I/O来讲,聚集索引扫描将比借助非聚集索引重复进行书签查找更有效。
- 除了主键外,频繁使用在join子句中的列。 聚集索引趋向于比非聚集索引更小;每个查找需要页的I/O一般来讲比非聚集索引更少。当join许多记录时这种区别将是巨大的。一两个额外的读页操作好像对一个单行检索来说不多,但是把这些额外的对100,000join迭代的读页操作相加,你会看到总共100,000到200,00读页操作。
因为数据已经是有序的,如果ORDER BY 是关于聚集索引的,那SQL Server将避免重新排序。记住:即使对一个表扫描,数据也将会按照聚集键值的顺序检索,因为数据表上的数据是按照聚集键值排序。
选择聚集索引键时应满足四个特点:
- Narrow(窄,即长度短)
- Unique(唯一性)
- Unchanging(不变化)
- Ever increasing(不断增长)
当你考虑聚集索引列时,你可能想尝试在相对静态的列上创建聚集索引,来最小化由于索引列的修改而引起的数据行重新排序。任何时间当聚集索引的键值改变了,所有把聚集索引作为书签的非聚集索引都需要被修改。
尽量避免在以单调形式插入的顺序的键字段上创建聚集索引,比如一个标识列(identity column)。这会在表的末尾创建一个"热点"(hot spot),结果会在表和索引的的末尾导致锁竞争和死锁。另外,聚集索引也不会重用以前数据页中的空间,因为所有新的行都排在数据表的末尾。这种情况造成了空间的浪费和你的表的增长会比预期的要大。一般的建议是,尽量在一个有某种随机分布的数据值上建立索引。尽量选择一个使得插入和修改活动散布在整个表的聚集键。一些能够使得数据随机化的候选聚集索引包括下列:
- 出生日期
- Last name first name
- 邮编
一个随机hash key(通常只当没有其他实际列可以作为好的候选的聚集索引时才使用)
在整个表上散布你的数据有助于最小化页竞争,同时也提供了更有效的空间利用。如果序列键是你的主键,你仍能用一个唯一、非聚集索引来提供一个访问路径并维护主键的唯一性。
因为你只能以一种方式对表上的数据进行物理排序,你只能有一个聚集索引。你想索引的其它列只能被定义为非聚集索引。
非聚集索引(Noclustered Index Indications)
SQL Server 2000允许你在一个表上最多创建249个非聚集索引。直到表变得非常巨大,一个非聚集索引实际所占用的空间与日益增长的访问性能相比是微不足道的。然而,时刻牢记:随着你在系统添加更多索引,数据修改语句由于索引性能的负担会变得更慢。
当定义非聚集索引时,你也想在选择性高的列上定义索引(也就是,具有低密度值的列)这样它们能被优化器来使用。一个非聚集索引中的大量重复值经常使得使用非聚集索引比表扫描代价更高(按照I/O)。让我们一起来看一个假设的例子:
Select title from titles Where price between $5 and $10
假设你在范围内有1,000,000行;这些1,000,000行随机分散在整个表中。尽管索引叶级拥有全部的有序索引行,但在最坏情况下,一次读一个数据行也将要求一个书签查找。
这样,在最坏情况下使用非聚集索引来进行范围检索的I/O估计如下:
引用
非聚集索引的层数
+用于发现所有匹配行的扫描的索引页数
+ 匹配的行数 × 每个书签查找的页数
+用于发现所有匹配行的扫描的索引页数
+ 匹配的行数 × 每个书签查找的页数
假如你的表上没有聚集索引,那书签仅仅是一个包括页和行的指针,当发现匹配的数据行时需要读取一个数据页。假如范围内有1,000,000行,当该表没有聚集索引时,借助非聚集索引的最坏情况的估计是:
引用
查找所有书签需要读取的索引页数
+1,000,000匹配行 × 1数据页的读取
= 1,000,000 +I/Os
+1,000,000匹配行 × 1数据页的读取
= 1,000,000 +I/Os
如果表中有聚集索引,书签就是一个代表数据行的聚集索引键,用书签来查找匹配的行要求搜索聚集索引树来定位数据行。假设聚集索引有两级非叶子节点,它将需要读取三页来在数据页上查找每个满足条件的行。如果范围内有1,000,000行,那么借助聚集索引的非聚集索引来查找数据,在最坏情况下它的代价估计如下:
引用
查找所有书签所读取的索引页的个数
+1,000,000匹配的行 * 每个书签查找需求的3页
=3,000,00+I/Os
+1,000,000匹配的行 * 每个书签查找需求的3页
=3,000,00+I/Os
把每种情况与表扫描相对比。如果整个表占用了50,000页,那么一个全表扫描将只花费50,000 I/O。所以,在这个例子中,一个表扫描实际将比用非聚集索引更有效。
下面的指南帮助你识别非聚集索引的潜在的候选者。
- SARG或join子句中引用的相对来说具有较高的选择性(密度值低)的列。
- Where子句和order by子句都引用的列。
- 当使用非聚集索引来检索数据行时,它们按照非聚集索引键的顺序被检索出来。如果结果集也需要按照非聚集索引进行排序,SQL Server能避免对结果集重新排序,这样可实现一个更有效的查询。下面就是这样一个例子:
Select * from authors Where state like "c%" Order by state
一般情况下,非聚集索引对单行查找(single-row lookup),连接(join),有高选择性的列的查询,小范围检索的查询有用。当你考虑非聚集索引的设计时也不要忽略了覆盖索引的优点,下节将会讲到。
索引覆盖(Index Covering)
索引覆盖是这样一种情况,查询中的select 和where子句中所需要的信息都能在非聚集索引中找到。因为非聚集索引包含了一个对应于表中每个数据行的一个叶子行,SQL Server能从非聚集索引的叶子行来满足查询。这导致了数据检索的更快,因为所有的信息能从索引页中直接获得,并且避免了SQL Server查找数据页。
因为非聚集索引的叶子页都连接在一起,索引的叶级可以像表中的数据页一样进行扫描,因为页级行都典型比数据行要小,一个覆盖了查询的非聚集索引将比同样列的聚集索引更快,因为需要读取的页数要更少。
在下面的例子中,quthors表中的关于au_lname 和au_fname的非聚集索引将覆盖查询,因为结果中的列和SARG都能从索引中提取出来:
Select au_lname, au_fname From authors Where au_lname like "M%" GO
其他使用聚合函数(MIN AVG SUM COUNT)的查询或者仅仅检查是否存在的查询也能从索引覆盖中获益。下面是一些能够利用索引覆盖优点的查询:
Select count (au_lname) from authors where au_lname like 'm%' Select count (*) from authors where au_lname like 'm%' Select count (*) from authors
你可能会奇怪最后一个查询,它甚至没有一个具体的SARG,怎么还能使用索引。SQL Server知道非聚集索引的特性,一个非聚集索引为表中的每行数据都包含了一行;它能够简单的计算任何一个非聚集索引的行数,而不需要扫描整个表。对最后一个查询,SQL Server选择最小的非聚集索引——也就是,具有最少的叶子页的索引。
向非聚集索引添加列使得发生索引覆盖是一种提高查询响应时间的常见方法。考虑下面的查询:
Select royalty from titles Where price between $10 and $ 20
如果你仅在price列上创建索引,SQL Server能发现满足price在该范围的索引中的行,但是它还需要访问数据行来检索royalty。范围中有100行,最坏情况下检索数据所花费的IO代价计算如下:
引用
索引的级数
+查找匹配行的索引页的数
+100 * 每个书签查找页数
+查找匹配行的索引页的数
+100 * 每个书签查找页数
如果royalty列添加到了price列索引中了,索引能被扫描来检索结果,而不是进行书签查找,这样具有更快的查询响应。使用索引覆盖的IO代价将只是:
引用
索引级数
+查找匹配行的索引页的数
+查找匹配行的索引页的数
引用
注意:
当考虑添加索引来利用索引覆盖时,小心使得索引变得太宽。当索引行的宽度接近与数据行宽度时,覆盖的优点将失去,因为增加了叶级页的数目。当索引的叶级页的数目接近了表中页的数目,索引级数也增加了,那么索引扫描的时间就开始接近于表扫描时间了。
另外,如果你添加对到索引中的列频繁修改,数据行中列的任何修改也会波及到索引中。这增加了维护的负担,也会影响修改的性能。
当考虑添加索引来利用索引覆盖时,小心使得索引变得太宽。当索引行的宽度接近与数据行宽度时,覆盖的优点将失去,因为增加了叶级页的数目。当索引的叶级页的数目接近了表中页的数目,索引级数也增加了,那么索引扫描的时间就开始接近于表扫描时间了。
另外,如果你添加对到索引中的列频繁修改,数据行中列的任何修改也会波及到索引中。这增加了维护的负担,也会影响修改的性能。
正如第33章讨论的那样,当在一个表上创建了 一个聚集索引,聚集键会被所有的非聚集索引引用,作为书签来定位实际的数据行。聚集键实际就是一些列,它们构成了聚集索引和它们的数据值。这种特性有时也能导致索引覆盖。
例如,假设suthors表在au_lname au_fname列上建立聚集索引,并有一个定义在au_id的非聚集索引。非聚集索引的每行都包含了与数据行对应的au_lname au_fname聚集键值。因为这个原因,下面查询将被非聚集索引覆盖:
select au_lname, au_fname from authors where au_id like '123%'
发表评论
-
百万级数据查询优化
2011-03-07 14:12 14491.对查询进行优化,应尽量避免全表扫描,首先应考虑在 whe ... -
死锁反反复复反反复复方法
2010-05-20 14:24 0其实所有的死锁最深层的原因就是一个:资源竞争 表现一: ... -
索引总结
2010-04-13 13:57 1423提高SQL Server性能最重要的方面之一就是提供正确的索引 ... -
选择索引:查询VS 修改性能
2010-04-13 13:55 1872I/O是决定查询性能的主 ... -
视图索引(Indexed Views)
2010-04-13 13:50 2265正如第27章所讲的那样 ... -
评价索引的有效性(Evaluating Index Usefulness)
2010-04-13 13:39 1971SQL Server提供索引主要有两个原因:其一是作为一种保证 ... -
索引和性能
2010-04-13 13:23 1403主要内容包括: 索引使用标准(Index Usage Cri ... -
SQL Server中三种查找数据方法的比较
2010-04-13 13:18 2452在SQL Server中主要有有三种方式可以查找数据,分别是: ... -
SQL Server性能调优指南
2010-04-13 09:48 2619经过几个月断断续续,比较系统学习,终于对数据库优化中所涉及到的 ... -
数据库性能调优概观
2010-04-11 19:24 2109一般而言,影响数据整体性能的因素如图所示。 若数据库设 ... -
最近需要掌握技术
2010-03-01 17:30 01、左右内全连接查询性能方面的比较 2、视图与连接查询时的性能 ... -
索引介绍
2010-01-04 06:50 0SQL Server : Nested transaction ... -
索引统计(Index Statistics)
2009-12-03 10:56 2006正如前面提到的,键的选择性是决定当执行一个查询时是否使用索引的 ... -
评价索引的有效性(Evaluating Index Usefulness)
2009-10-29 15:29 1151SQL Server提供索引主要有两个原因:其一是作为一种实施 ... -
索引的选择(Index Selection)
2009-10-29 13:56 1160当决定在表中创建哪些索引时要对应用中查询进行仔细分析。具体包括 ... -
索引使用标准(Index Usage Criteria)
2009-10-27 17:13 1714索引使用标准(Index Usage Criteria) ... -
索引和性能(Indexs and Performance)
2009-10-27 15:24 1152索引和性能(Indexs and Pe ... -
SQL Server 2000索引实现内幕
2009-10-19 16:58 1622翻译自:Microsoft SQL Server 2000 U ... -
SQL Server迁移到ORACLE相关资料收集
2009-10-12 11:16 01|、http://blog.163.com/shenlian ... -
SQL Server内存管理
2009-09-30 14:41 2863默认情况下,SQL Server 20 ...
相关推荐
"苹果设备配件设计指南 Accessory Design Guidelines for Apple Devices" 苹果设备配件设计指南是一份详细的指南,旨在指导配件设计者和制造商,如何设计和制造高质量的苹果设备配件。该指南包括了苹果设备配件设计...
标题中提到的“16口千兆交换机芯片BCM5396 Design Guidelines 设计指南”指向了博通(Broadcom)公司生产的16端口千兆以太网交换芯片BCM5396。本设计指南是为设计师提供参考的文档,涵盖了如何高效利用该芯片进行...
《Design Guidelines for RCD Snubber of Flyback Converters》这份资料深入探讨了在设计飞返转换器(Flyback Converter)时RCD抑制器的重要性和设计准则。RCD抑制器是电源转换器中的一种关键组件,它有助于保护电路...
《Framework Design Guidelines Digest》提供了一套系统的方法论,帮助开发者在设计.NET框架时遵循最佳实践。通过采用场景驱动设计、进行用户体验研究、创建自文档化API以及深入了解客户需求等原则,可以有效提高API...
.NET Framework Design Guidelines 学习.NET框架设计的好资料,精彩的PPT讲解
Stencil Design Guidelines 模板设计指导是指在PCB生产过程中,Stencil设计的指南和规范。Stencil是PCB制造过程中的一种关键工具,用于将焊料印到PCB表面。Stencil Design Guidelines旨在帮助设计师和制造商设计和...
**PCB Design Guidelines For Reduced EMI** 此文档标题明确指出了本文档的主要内容:即为减少电磁干扰(Electromagnetic Interference, EMI)提供PCB(Printed Circuit Board, 印制电路板)设计指南。在电子设备...
这是一份更新至2022年5月的APPLE 苹果官方资料 里面有所有过往苹果产品的相关资料,产品尺寸,规格,参数。 用于产品周边外设产品的设计指导书
### Intel IXP435 316263_Hardware Design Guidelines #### 概述 本文件(文号:316263;修订版:001US)详细介绍了Intel下一代网络处理器(代号Hamoa)的初步硬件设计指南。这份文档发布于2007年1月,并标记为...
《Android_Design_Guidelines》是一份由Adam Beckley撰写于2011年2月的设计文档,旨在为Android应用开发者提供一套全面而实用的设计指导原则。这份文档强调了Android平台的开放性和灵活性,同时也指出了在面对多样化...
《Accessory Design Guidelines for Apple Devices R14》是苹果公司发布的一份详细的技术文档,旨在为开发者和配件制造商提供设计和开发适用于苹果设备的外设的准则。这份304页的指南涵盖了从设计理念到工程实施的...
《苹果设备配件设计指南》是苹果公司为开发者和制造商提供的一份详细的技术规范文档,旨在确保所有第三方配件与苹果设备的兼容性和性能。这份指南涵盖了从基础概念到具体设计要求的多个方面,以下是对其中主要知识点...
Krzysztof Cwalina与Brad Abrams合著的《.NET设计规范:约定、惯用法与模式 (第2版)》的英文原版pdf,这是压缩包最后一部分。
intel board设计规则,针对硬件设计人员有重要的学习价值,尤其是设计硬件产品这一方面。
Krzysztof Cwalina与Brad Abrams合著的《.NET设计规范:约定、惯用法与模式 (第2版)》的英文原版pdf,这是压缩包第二部分。
The authors provide a comprehensive overview of the 5G RAN design guidelines, key design considerations, and functional innovations as identified and developed by key players in the field. They depict...
《Apple设备配件设计准则R16》是一份详细的指南,旨在为开发者和制造商提供设计兼容Apple设备配件的规范。这份指南涵盖了多个关键知识点,确保配件的性能、安全性和用户体验达到Apple的标准。 首先,文档介绍了基本...
This document describes guidelines that aid in developing applications and libraries that use the Reactive Extensions library
Krzysztof Cwalina与Brad Abrams合著的《.NET设计规范:约定、惯用法与模式 (第2版)》的英文原版pdf,这是压缩包第一部分。