[color=green]数据库索引:
什么是索引
可以用两种方法从数据库中获得数据第一种方法常被称为顺序访问方式它需要SQL
检查每一个记录以找到与之相匹配的这种查找的方法效率很低但它是使记录准确定位
的唯一方法回想一下以前图书馆的卡片档案系统假设卡片是按字母的顺序排列的那
么在将它们抽出来后在放回卡片柜时那么当你来到书柜的旁边以后那么你只能从头开
始然后一张卡片一张卡片地看直到找到你所需要的当然也许你碰巧很快就找到了
现在假设图书管理员将书的标题按字母顺序排列那么通过查看目录中的书的字母顺
序你可以很快地找到你想要的书
进一步设想如果管理员非常勤劳他不但将书按标题进行了排序而且还另外制作了
不同的卡片柜在那个卡片柜中他是按照作者的名字或其他的方式进行排序的那么这对
于你一个图书馆的读者来说检索信息就有了相当大的灵活性而且你只需要很短的时间
就能找到你所需要的内容
在数据库中使用索引可以让SQL 使用直接访问方式SQL 采用树形结构来存储和返回
索引数据用以指示的数据存储在树的最末端也就是叶子它们被称为结点也可以叫
叶子每一个结点中有一个指向其它结点的指针结点左边的值只是它的双亲结点结点
右边的值则是孩子结点或叶子
SQL 将从根结点开始直到找到所需要的数据
注当查询没有使用索引的表时查询通常是全表搜索后才会得到结果全表搜索会让数据
库服务程序遍历过表中的所有记录然后返回给定条件的记录这种方法就好比从图书
馆的第一号书架的第一本书找起直到找到了你所需要的书一样你或许会使用卡片
柜以更快地找到所需的书索引可以让数据库服务程序快速地定位到表中的确定行
使用索引的技巧
这里给出了几个在使用索引时需要记住的技巧
l 对于小表来说 使用索引对于性能不会有任何提高
l 当你的索引列中有极多的不同的数据和空值时索引会使性能有极大的提高
l 当查询要返回的数据很少时索引可以优化你的查询 比较好的情况是少于全部数据的
25% 如果你要返回的数据很多时索引会加大系统开销
l 索引可以提高数据的返回速度 但是它使得数据的更新操作变慢在对记录和索引进
行更新时请不要忘记这一点如果要进行大量的更新操作在你执行更新操作时请不
要忘记先删除索引当执行完更新操作后只需要简单的恢复索引即可对于一次特
定的操作系统可以保存删除的索引18 个小时在这个时间内数据更新完后你可以恢
复它
l 索引会占用你的数据库的空间 如果你的数据库管理系统允许你管理数据库的磁盘空
间那么在设计数据库的可用空间时要考虑索引所占用的空间
l 对字段的索引已经对两个表进行了归并操作 这一技术可以极大地提高归并的速度
l 大多数数据库系统不允许你对视图创建索引 如果你的数据库系统允许这样做那么
可以使用这种方法来在SELECT 语句中对视图的数据进行排序很不巧一些数据库
系统中也不允许在视图中使用ORDERY BY 子句
l 不要创建对经常需要更新或修改的字段创建索引 更新索引的开销会降低你所期望获
得的性能
l 不要将索引与表存储在同一个驱动器上 分开存储会去掉访问的冲突从而使结果返回
得更快
实体—联系图(E-R图):
实体型:用矩形表示,矩形框内写明实体名。
属性:用椭圆形表示,椭圆形框内写明属性名并用无向边将其与相应的实体连接起来。(码:属性名加下划线。多值属性:用双线椭圆形表示,椭圆形框内写明属性名并用无向边将其与相应的实体连接起来。导出属性:用虚线椭圆形表示,椭圆形框内写明属性名并用无向边将其与相应的实体连接起来。)联系:联系本身:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1、1:n或m:n) 。联系的属性:联系本身也可以有属性。如果一个联系具有属性,则这些属性也要用无向边与该联系连接起来。
E-R图实例:用E-R图表示某个工厂物资管理的概念模型。
1.实体及其属性:仓库: 仓库号、面积、电话号码; 零件 :零件号、名称、规格、单价、描述;供应商:供应商号、姓名、地址、电话号码、帐号;项目:项目号、预算、开工日期;职工:职工号、姓名、年龄、职称
2.实体之间的联系如下:(1)一个仓库可存放多种零件,一种零件可以存放在多个仓库中。仓库和零件间有多对多联系。用库存量表示某零件在某仓库中的数量,即联系的属性。(2)一个仓库有多个职工当保管员,一个职工只在一个仓库工作。
仓库和职工之间是一对多的联系。(3)职工之间具有领导-被领导关系。即仓库主任领导若干保管员。职工实体型中具有一对多的联系。(4)供应商、项目和零件三者之间具有多对多的联系。
[/color]
什么是索引
可以用两种方法从数据库中获得数据第一种方法常被称为顺序访问方式它需要SQL
检查每一个记录以找到与之相匹配的这种查找的方法效率很低但它是使记录准确定位
的唯一方法回想一下以前图书馆的卡片档案系统假设卡片是按字母的顺序排列的那
么在将它们抽出来后在放回卡片柜时那么当你来到书柜的旁边以后那么你只能从头开
始然后一张卡片一张卡片地看直到找到你所需要的当然也许你碰巧很快就找到了
现在假设图书管理员将书的标题按字母顺序排列那么通过查看目录中的书的字母顺
序你可以很快地找到你想要的书
进一步设想如果管理员非常勤劳他不但将书按标题进行了排序而且还另外制作了
不同的卡片柜在那个卡片柜中他是按照作者的名字或其他的方式进行排序的那么这对
于你一个图书馆的读者来说检索信息就有了相当大的灵活性而且你只需要很短的时间
就能找到你所需要的内容
在数据库中使用索引可以让SQL 使用直接访问方式SQL 采用树形结构来存储和返回
索引数据用以指示的数据存储在树的最末端也就是叶子它们被称为结点也可以叫
叶子每一个结点中有一个指向其它结点的指针结点左边的值只是它的双亲结点结点
右边的值则是孩子结点或叶子
SQL 将从根结点开始直到找到所需要的数据
注当查询没有使用索引的表时查询通常是全表搜索后才会得到结果全表搜索会让数据
库服务程序遍历过表中的所有记录然后返回给定条件的记录这种方法就好比从图书
馆的第一号书架的第一本书找起直到找到了你所需要的书一样你或许会使用卡片
柜以更快地找到所需的书索引可以让数据库服务程序快速地定位到表中的确定行
使用索引的技巧
这里给出了几个在使用索引时需要记住的技巧
l 对于小表来说 使用索引对于性能不会有任何提高
l 当你的索引列中有极多的不同的数据和空值时索引会使性能有极大的提高
l 当查询要返回的数据很少时索引可以优化你的查询 比较好的情况是少于全部数据的
25% 如果你要返回的数据很多时索引会加大系统开销
l 索引可以提高数据的返回速度 但是它使得数据的更新操作变慢在对记录和索引进
行更新时请不要忘记这一点如果要进行大量的更新操作在你执行更新操作时请不
要忘记先删除索引当执行完更新操作后只需要简单的恢复索引即可对于一次特
定的操作系统可以保存删除的索引18 个小时在这个时间内数据更新完后你可以恢
复它
l 索引会占用你的数据库的空间 如果你的数据库管理系统允许你管理数据库的磁盘空
间那么在设计数据库的可用空间时要考虑索引所占用的空间
l 对字段的索引已经对两个表进行了归并操作 这一技术可以极大地提高归并的速度
l 大多数数据库系统不允许你对视图创建索引 如果你的数据库系统允许这样做那么
可以使用这种方法来在SELECT 语句中对视图的数据进行排序很不巧一些数据库
系统中也不允许在视图中使用ORDERY BY 子句
l 不要创建对经常需要更新或修改的字段创建索引 更新索引的开销会降低你所期望获
得的性能
l 不要将索引与表存储在同一个驱动器上 分开存储会去掉访问的冲突从而使结果返回
得更快
实体—联系图(E-R图):
实体型:用矩形表示,矩形框内写明实体名。
属性:用椭圆形表示,椭圆形框内写明属性名并用无向边将其与相应的实体连接起来。(码:属性名加下划线。多值属性:用双线椭圆形表示,椭圆形框内写明属性名并用无向边将其与相应的实体连接起来。导出属性:用虚线椭圆形表示,椭圆形框内写明属性名并用无向边将其与相应的实体连接起来。)联系:联系本身:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体连接起来,同时在无向边旁标上联系的类型(1:1、1:n或m:n) 。联系的属性:联系本身也可以有属性。如果一个联系具有属性,则这些属性也要用无向边与该联系连接起来。
E-R图实例:用E-R图表示某个工厂物资管理的概念模型。
1.实体及其属性:仓库: 仓库号、面积、电话号码; 零件 :零件号、名称、规格、单价、描述;供应商:供应商号、姓名、地址、电话号码、帐号;项目:项目号、预算、开工日期;职工:职工号、姓名、年龄、职称
2.实体之间的联系如下:(1)一个仓库可存放多种零件,一种零件可以存放在多个仓库中。仓库和零件间有多对多联系。用库存量表示某零件在某仓库中的数量,即联系的属性。(2)一个仓库有多个职工当保管员,一个职工只在一个仓库工作。
仓库和职工之间是一对多的联系。(3)职工之间具有领导-被领导关系。即仓库主任领导若干保管员。职工实体型中具有一对多的联系。(4)供应商、项目和零件三者之间具有多对多的联系。
[/color]