在表上创建索引以提高性能

1.       索引是什么

1.       索引是什么

1.       索引是表示数据的一种方式,它提供的数据顺序不同于数据在磁盘上的物理存储顺序。索引的特殊作用是在表内重新排列记录的物理位置。索引基于表的一列或多列的组合建立。使用索引时,数据以一种分类排序的方式提供给用户,排列顺序可以用CREATE INDEX语句控制。通常,通过在合适的字段上建立索引,可以显著提供性能,特别是在表之间的连接字段上建立索引。

2.       可以使用两种方法从数据库中检索数据。第一种方法,通常称为顺序存取法,要求SQL扫描记录下来寻找与条件匹配的记录。这种查询方式效率很低,但它是SQL寻找正确记录的唯一方法。回想一下过去图书馆里大量卡片目录把图书归档的时代,假设图书管理员把按字母排列的索引卡片拿出来,打乱它们的次序,然后把他们放回装卡片的抽屉中。那么当想查找某本书的架位时,就需要从最开始一张一张地查看,直到找到想要的图书为止(一旦发现该书,就停止查找)。现在假设图书管理员讲图书按书名的字母分类,可以通过字母很快地找到有关这本书的信息。进一步设想,如果管理员很勤快,他不仅按书名把图书分类,而且还按作者姓名和图书主题的顺序分别建立了另外的目录。这个过程将给图书用户在检索信息时提供很大的灵活性,而且能够用比原来少得多的时间检索到需要的信息。

3.       在数据库中增加索引,使SQL能够使用直接存取法访问数据。SQL使用树状结构存储和检索索引的数据。数据组的指针存储在树的顶端,这些组成为节点。每个节点都包含指向其他节点的指针。指针指向的左端节点包含的值小于它们父节点的值;右端的值则大于父节点的值。数据库系统从顶端节点开始查询,并简单地按照指针查询下去,知道成功为止。

4.       对无索引的表进行的查询,一般称为全表扫描。全表扫描是数据库服务器用来搜寻表的每一行、直到所有符合给定条件的行返回为止的过程。

5.       如果选择建立了索引的列名,可以看到该列中的数据实际上被排序显示。

6.       当一个表被删除时,所有伴随该表的索引也被删除

2.       使用索引的技巧

1.       对于小的表,使用索引不会得到任何性能的改善。

2.       在数据变化幅度较大的列上建立索引,会产生最大限度的性能改善。

3.       当查询返回少量的数据时,索引能够优化查询(根据经验,返回数据的数据量最好少于总数据量的25%)。如果经常返回大量的数据,那么索引会增加额外开销。

4.       索引能提高数据检索的速度。然而,他们却使数据更新的速度减慢。在带有索引的一行中做许多插入、删除或更新操作时,要特别记住这点。对于大量的插入、删除或更新,可以考虑在实施修改时删除索引,在完成插入、删除或更新后,再重建索引。对于特定的修改,删去索引并在载入数据后重建索引,可能回节省程序员的时间。

5.       索引在数据库内占用空间。如果正在使用的数据库管理系统能够管理数据库占据的磁盘空间,则在规划数据大小时,索引的大小是个考虑因素。

6.       通常总是在那些勇于两表间连接的字段上建立索引,这样可以大大地提高连接的速度。

7.       大多数数据库系统不允许在一个视图上建立视图,并在该视图内对数据排序(许多系统也不允许CREATE VIEW语句带有ORDER BY子句)。

8.       不要在进行定期更新或修改的字段上建立索引。需要不断更新的索引导致的额外消耗,将抵消期望得到的任何性能上的改进。

9.       不要在同一物理介质上同时存储索引和表。分开存储这些对象可以避免驱动器争用,并使查询速度更快。

10.    索引不应在具有大量空值(null)的列上使用。

3.       在多个字段上建立索引

1.       SQL允许在多个字段上建立索引,这种索引称为复合索引。

2.       性能改进的程度如何,将决定是使用单列索引还是使用复合索引。例如,如果大部分查询都由一个特定的列作为查询条件的一部分,你也许会决定使用单列索引;另一方面,如果那些被索引的列经常被一起用作查询的条件,你也许会建立一个复合索引。

2.       使用带有UNIQUE关键字的CREATE INDEX语句

1.       由于主键中的每个值必须是唯一的,如果为表指定主键,则数据库讲隐含地创建索引。主键和唯一约束都使系统生产索引。

3.       索引与连接

1.       当查询中使用复杂的连接时,select语句会花费很长时间。对于大表,这个时间可能接近几秒。在具有多个用户的客户机/服务器环境中,这类操作会令应用程序的用户及其沮丧。在经常用于连接的字段上建立索引,可以大大优化查询性能。然而,如果建立太多的索引,可能会使系统的性能建立,而不是使速度提高。建议在一些大表(有数千条记录的表)上使用索引。这类试验会使你加深对SQL语句优化的理解。

4.       使用聚簇索引

1.       当表被使用聚簇索引时,数据存储在同一数据块中,这样就只允许极少的数据库块读取从而导致更快的执行性能。当使用聚簇索引时,表内数据的物理排列将被修改。使用聚簇索引通常可以使数据检索速度比使用传统的非聚簇索引更快。创建聚簇索引基于将被加入聚簇索引的表,然后将这些表加入聚簇索引。然后将这些表加入聚簇索引。应该只将那些经常被连接的表加入聚簇中,不要将那些通过简单的select语句单独访问的表加入聚簇索引中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值