索引可以提高数据的访问速度,但同时也增加了插入、更新和删除操作的处理时间。所以是否要为表增加索引、索引建立在那些字段上,是创建索引前必须要考虑的问题。解决此问题就是分析应用程序的业务处理、数据使用,为经常被用作查询条件、或者被要求排序的字段建立索引。
索引是建立在数据库表中的某些列的上面。因此,在创建索引的时候,应该仔细考虑在哪些列上可以创建索引,在哪些列上不能创建索引。
一般选择在这样的列上创建索引:
1. 在经常需要搜索查询的列上创建索引,可以加快搜索的速度;
2. 在作为主键的列上创建索引,强制该列的唯一性和组织表中数据的排列结构;
3. 在经常用在连接的列上创建索引,这些列主要是一些外键,可以加快连接的速度;
4. 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;
5. 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询 时间;
6. 在经常使用在Where子句中的列上面创建索引,加快条件的判断速度;
7. 为经常出现在关键字order by、group by、distinct后面的字段,建立索引。
一般不选择具有这些特点的列上创建索引:
1. 对于那些在查询中很少使用或者参考的列不应该创建索引。这是因为,既然这些列很少使用到,因此有索引或者无索引,并不能提高查 询速度。相反,由于增加了索引,反而降低了系统的维护速度和增大了空间需求;
2. 不要在有大量相同取值的字段上,建立索引。这是因为,由于这些列的取值很少,例如人事表的性别列,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大。增加索引,并不能明显加 快检索速度;
3. 对于那些定义为text, image和bit数据类型的列不应该增加索引。这是因为,这些列的数据量要么相当大,要么取值很少;
4. 当修改性能远远大于检索性能时,不应该创建索引。这是因为,修改性能和检索性能是互相矛盾的。当增加索引时,会提高检索性能,但是会降低修改性能。当减少索引时,会提高修改性能,降低检索性能。因此,当修改性能远远大于检索性能时,不应该创建索引。
创建索引需要注意的地方:
1. 限制表上的索引数目。对一个存在大量更新操作的表,所建索引的数目一般不要超过3个,最多不要超过5个。索引虽说提高了访问速度,但太多索引会影响数据的更新操作。
2. 避免在取值朝一个方向增长的字段(例如:日期类型的字段)上,建立索引;对复合索引,避免将这种类型的字段放置在最前面。由于字段的取值总是朝一个方向增长,新记录总是存放在索引的最后一个叶页中,从而不断地引起该叶页的访问竞争、新叶页的分配、中间分支页的拆分。此外,如果所建索引是聚集索引,表中数据按照索引的排列顺序存放,所有的插入操作都集中在最后一个数据页上进行,从而引起插入“热点”。
3. 对复合索引,按照字段在查询条件中出现的频度建立索引。在复合索引中,记录首先按照第一个字段排序。对于在第一个字段上取值相同的记录,系统再按照第二个字段的取值排序,以此类推。因此只有复合索引的第一个字段出现在查询条件中,该索引才可能被使用。因此将应用频度高的字段,放置在复合索引的前面,会使系统最大可能地使用此索引,发挥索引的作用。
4. 删除不再使用,或者很少被使用的索引。表中的数据被大量更新,或者数据的使用方式被改变后,原有的一些索引可能不再被需要。数据库管理员应当定期找出这些索引,将它们删除,从而减少索引对更新操作的影响。
分享到:
相关推荐
本文将详细介绍数据库创建索引的原则、分类、创建方法、管理和优化等方面的知识点。 索引的概念和优点 ---------------- 索引是数据库表中一个或多个列的值的数据结构,用于快速定位和检索数据。创建索引可以提高...
### Oracle 创建索引的基本规则 在Oracle数据库管理中,创建合适的索引对于提高查询效率、减少数据处理时间具有重要作用。本文将围绕Oracle创建索引的基本规则进行深入探讨,旨在帮助读者更好地理解如何根据不同的...
### 创建索引的作用及其利弊分析 在数据库管理与优化领域,索引是提升查询效率的重要工具之一。本文将从创建索引的作用出发,详细探讨其背后的技术原理、实际应用场景以及可能带来的利弊。 #### 一、索引的基本...
正如文档标题“Oracle创建索引要做到三个适当”所强调的,创建索引需要遵循“适当”的原则,具体包括在适当的表上、适当的列上创建适当数量的索引。以下将对这三个方面进行详细阐述,以帮助数据库管理员更好地理解...
2.4.3 创建索引原则 创建索引应考虑查询优化,针对频繁出现在WHERE子句中的列创建索引,但过多的索引会增加写操作的开销。 2.4.4 删除索引 DROP INDEX语句用于删除索引,但需要注意,删除索引可能导致查询性能下降...
创建索引可以在创建表的时候创建,也可以在创建表之后创建。创建索引的基本语法格式如下: ``` CREATE TABLE table_name [col_name data_type] [UNIQUE | FULLTEXT | SPATIAL] [INDEX | KEY] [index_name] (col_name...
一般来说,选择创建索引的列时,可以参考以下的原则: * 在经常需要搜索的列上创建索引,加快搜索的速度。 * 在作为主键的列上创建索引,强制该列的唯一性和组织表中数据的排列结构。 * 在经常用于连接的列上创建...
#### 一、创建索引原则及索引失效情况 **创建索引的原则:** 1. **为频繁排序、分组、联合操作的字段建立索引:** 这些操作通常需要对数据进行排序,索引能够显著提高这类操作的速度。 2. **为常用的查询条件字段...
#### 二、创建索引原则 - **最左前缀匹配原则**:MySQL会在索引中一直向右匹配直到遇到范围查询(如`>`、`、`BETWEEN`、`LIKE`等),因此索引的顺序非常重要。 - **乱序原则**:当使用`=`或`IN`操作符时,索引可以...
这时,我们可以为`ds_order`表中的`user_id`字段创建索引,提高查询效率。 ```sql CREATE TABLE `ds_order` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键 id', `user_id` int(11) NOT NULL COMMENT '...
为什么不对没一列创建索引 减少开销 覆盖索引 效率高 减少开销:假如对col1、col2、col3创建组合索引,相当于创建了(col1)、(col1,col2)、(col1,col2,col3)3个索引 覆盖索引:假如查询SELECT col1, col2...
### 数据库索引创建建议 #### 一、深入理解索引结构 索引在数据库管理中扮演着极其重要的角色,特别是在处理大量数据时。合理的索引设计能够显著提高查询性能,减少系统的响应时间。本文主要探讨数据库中的两种...
除了创建索引,索引管理还包括删除。在MySQL中,可以使用`DROP INDEX`语句来删除索引。但是,需要注意的是,如果索引与主键关联,必须先删除主键,再删除主键索引。 索引的失效场景包括:更新或删除索引列,使用不...
因此,创建索引时应遵循以下原则: 1. 选择性高的列适合创建索引。选择性是指列中不同值占总行数的百分比,选择性越高的列,其索引效率也越高。 2. 考虑查询模式,对于经常用于WHERE子句、JOIN条件、ORDER BY以及...
5.1 索引概述中提到了创建索引的主要优点和原则。首先,创建索引可以显著提高查询速度,特别是在处理大数据量时。同时,索引的唯一性可确保记录的唯一性,防止数据重复。然而,并非所有列都适合创建索引,例如,频繁...
但是,索引也存在一些缺陷,例如创建索引和维护索引要耗费时间,索引需要占物理空间,等等。在本文中,我们将详细介绍 Oracle 索引的创建、特点、不足、创建索引列的特点、不应该建索引列的特点、限制索引等方面的...
例如,一个存储企业部门信息的department表,如果记录数量不超过一百条,创建索引的收益将远小于维护索引的成本。相反,对于超大型表,不是所有情况都需要建立索引。如果这些大表的常用查询数据占比不超过10%-15%,...
- 对于频繁进行连接操作但未定义为外键的列,应该创建索引。这是因为连接操作通常涉及多表,索引能够加速匹配过程。 - 经常需要进行排序或分组(如`GROUP BY`或`ORDER BY`)的列应建立索引,这样在执行这些操作时...
创建索引时需要遵循一些原则,例如: * 对经常用来查询的列创建索引。 * 对经常用来排序和分组的列创建索引。 * 对经常用来连接和子查询的列创建索引。 索引的类型 ------------- 索引可以分为以下几种类型: * ...