首页 > Linux操作系统 > Linux操作系统 > 整理的一些SQL題,與討論
1.what is the difference between Clustered Indexes and Non-Clustered Indexes? when to use?
2.what is the domain in database?
3.which tools is use to identify problematic transaction?
4.how to use SQL when more than 3G memory?
5.when to thinking about profermance transaction in a project development?
---------------
域应该是概念数据库模型的概念吧,好像对应的就是屋里数据库中的自定义数据类型,不知道这样说对不对
--------------------------
记得在王珊和撒斯轩的数据库基础书中提到,
domain就是相同类型的集合,在数据库中也就是对应到表中的同列值等。
-----------------------------------
个人理解:
自定义数据类型,能规范数据库的表结构数据类型
比如:基础表 BaseTable( Code,Name,...)
如果这样的表在数据库中有几十甚至几百个,而且还有N个版本的升级,如果不是用Domain(User datatype)来管理,大家会发现,Code的类型和长度是不同的,Name 是长度也是不同的,数据类型和长度不同在项目开发和数据转换时,能带来多大的麻烦,有经历的人就知道。
如果在设计时 先定自义Domain
比如定义:
TypeCode Char(8)
TypeLongCode Varchar(32)
TypeName Varchar(20)
TypeLongName Varchar(200)
这样可以解决上述问题
---------------------------------
第一个问题:
聚集索引
当创建聚集索引时,表里所有的记录按照聚集索引键的顺序存储。由于记录被索引键物理地排序,所以每个表只能有一个聚集索引。你可以认为聚集索引的结构类似于一个档案柜:数据页就像文件夹一样存在按字母表排序的抽屉里,而数据行象存在文件夹里的记录一样也按照顺序排列。
你可以把索引树的中间层看成是也按顺序排列的抽屉一样,这有助于你找到合适的文件夹。
聚集索引在进行范围查询或在有重复值的列上搜索时是很有用的,因为这些在一个范围内的记录都物理地存在相同的页里或邻近的页里。
表的数据页也就是聚集索引的叶级。要找到所有聚集索引的键值,SQL Server最终必须扫描所有的数据页。
当使用聚集索引搜索一个值时SQL Server要执行下面的步骤:
1. 查询系统目录以找到索引的根页的地址
2. 用搜索的值与根页里存储的键值进行比较
3. 找到页里小于或等于搜索值的最大键值
4. 按照键里存储的页指针去索引的下一层找到合适的页
5. 继续按照页指针(即重复步骤3和4)进行查找直到到达数据页
6. 搜索数据页上的记录来定位任何和搜索值匹配的记录。如果数据页上没有找到匹配的记录,那么表没有包含匹配的值。
非聚集索引
非聚集索引是独立的索引结构,它独立于表里数据记录的物理排序顺序。每个表最多只能有249个非聚集索引。
非聚集索引类似于书后面的目录。为了找到特定主题所在的页,可以查找目录里特定的主题,然后翻到目录所指向的页即可。这是一个有效的方式,只要主题仅在很少的页上。如果主题在很多页上,或者如果要读很多的主题,那么更有效的方式是读整本书。
非聚集索引工作原理类似于书的目录。从索引的观点来看,数据行是随机分部在整个表里的。非聚集索引树按排序顺序包含了索引键值。索引的叶级为表的每个数据行存储一条记录。叶级的每一行包含一个数据行定位器去定位表里实际的数据行。
如果给表创建一个非聚集索引,索引叶级的数据行定位器实际是指向数据页和记录在该页里所在行号的一个指针(见图29.3)。
SQL Server 7.0以前的的版本里,为了分辨键值引用的数据行,非聚集索引里仅仅存的是行定位器(即RowID)。如果表上定义了一个聚集索引,且一行或更多的行移到了另一页(INSERT或UPDATE的结果),那么非聚集索引里的所有相应的行都不得不更改以反映新的行ID。这加大插入和修改的成本。
在SQL Server 7.0和以后的版本里,在有聚集索引的表上,非聚集索引不再把数据行ID作为索引的一部分。相反,非聚集索引的数据行定位器跟聚集索引的键值相关联。当SQL Server到达非聚集索引叶级时,它使用聚集索引键来开始搜索聚集索引以找到实际的数据行(见图29.4)。这增加了搜索的I/O,但好处是如果在有聚集索引的表上发生了页拆分,或者移动了记录(例如,由于更新的原因),非聚集索引仍然保持不变。只要聚集索引键没有更改,在索引里就没有数据行定位器被更改。
SQL Server在使用非聚集索引搜索一个值时执行下面的步骤:
1. 查询系统目录以确定索引的根页的地址。
2. 用搜索的值与根页里存储的索引键值进行比较。
3. 找到页里小于或等于搜索值的最大键值。
4. 按照下页指针去非聚集索引树的下一层。
5. 继续按照页指针(即重复步骤3和4)进行查找直到到达非聚集索引的叶页。
6. 搜索叶页上的索引键所在的行以定位匹配搜索值的所有行。如果叶页上没有找到匹配的行,那么表没有包含匹配的值。
7. 如果在叶页上找到匹配的行,SQL Server按照数据行定位器找到数据页上的数据行。
第二个问题:
数据库里域指的是对象属性的取值范围
第三个问题:
事件探查器
第四个问题:
http://www.windbi.com/showtopic-24.aspx
查看启用AWE那一部分的内容
第五个问题:
并发的时候
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7899089/viewspace-611495/ ,如需转载,请注明出处,否则将追究法律责任。