背景:如果表中有一列的数据分布很不均匀,大部分是1,少部分是0,而且我们经常查询的刚好是0,在这种情况下,走全表扫描的话,有些浪费资源,如 果对该列建立索引的话,那些值为1的索引数据又有些浪费,因为我们很少去查询值为1的数据,所以我们只对值为0的数据建立索引。
- create table t6(status char(1));
- begin
- for i in 1..100000 loop
- insert into t6 values('1');
- end loop;
- for i in 1..10 loop
- insert into t6 values('0');
- end loop;
- end;
对status列建立索引
- create index idx_t6_status on t6(status);
查询索引占用的块
- select index_name, i.leaf_blocks
- from user_indexes i
- where index_name = upper('idx_t6_status')
- INDEX_NAME LEAF_BLOCKS
- X_T6_STATUS 182
看到索引叶子块有182个,占用的比较多
下面我们只对status='0'建立索引来减少索引叶子块
- drop index idx_t6_status;
- create index idx_t6_status on t6(decode(status,'0','0'));
- 1 IDX_T6_STATUS 1
可以看到索引叶子块只有1个,数量减少了很多
通过索引查询status值为'0'的数据
- select * from t6 where decode(status, '0', '0') = '0'
执行计划如下
- SELECT STATEMENT, GOAL = ALL_ROWS 2 29 87
- TABLE ACCESS BY INDEX ROWID CARMOT_DEVELOP T6 2 29 87
- INDEX RANGE SCAN CARMOT_DEVELOP IDX_T6_STATUS 1 389
相关推荐
为了提高数据库查询的效率,一种常用的方法是建立索引,它能够显著加速数据检索过程,是数据库查询速度优化不可或缺的一部分。 索引可以比喻为一本书的目录,它不是数据本身,而是一个指向数据位置的指针结构,使得...
如果直接删除并重新创建聚集索引,那么所有的非聚集索引都需要被删除并重新建立两次,因为它们依赖于聚集索引的键来定位数据行。但是,通过`DROP_EXISTING`,你可以避免这个昂贵的过程,因为它会更新现有索引,而...
### Oracle建立索引详解 #### 一、索引的基本概念 在Oracle数据库中,索引是一种重要的数据结构,用于加速数据检索的过程。索引通过在数据表的基础上构建一种特殊的结构来实现这一目标,使得数据库系统在查找数据...
- 数据本身就是索引的一部分,即聚集索引的叶子节点包含了实际的数据行。 - 每张表只能拥有一个聚集索引,因为表中数据只能按照一种方式排序。 - 聚集索引通常占用的空间较小,大约为表大小的5%左右。 - 类比于...
创建好`Document`后,将其添加到`IndexWriter`,这样Lucene就会为这些字段建立索引。 当索引构建完成后,我们就可以实现搜索功能了。首先,创建一个`DirectoryReader`来读取已经建立的索引,然后使用`IndexSearcher...
主键是表中唯一标识每行的列,确保数据的唯一性和完整性,通常建立在主键上的索引称为聚簇索引,它的叶子节点直接包含数据行。非聚簇索引则不按照数据的物理顺序存储,而是包含指向数据行的指针。 索引的性能影响...
然而,不是所有列都适合建立索引,尤其是在数据量不大或筛选结果导致大量行被检索的情况下,建立索引可能会得不偿失。在实际操作中,应结合业务需求、数据量和查询模式来决定何时、何处建立索引,以达到最佳的性能...
3. **分批创建索引**:对于大型表,可以考虑先创建部分索引,然后逐步添加更多的索引以避免一次性创建所有索引带来的性能冲击。 4. **使用并行创建索引**:在支持并行处理的环境中,可以利用`parallel`参数来加速...
### MySQL高级部分详解 #### 一、索引(Index) **定义:** 索引是数据库中用于加速数据检索的一种特殊数据结构。它包含了表中某些列的值及其对应的记录位置,使得查找数据变得更快。 **优点:** 1. **提高查询...
使用索引时应遵循一定的原则,如避免在频繁更新的列上创建过多索引,对常用于查询的字段建立索引,数据量小的表通常无需索引,以及在区分度高的列上建立索引等。 3. **索引的分类**: - **单列索引**:包括普通...
1. 针对频繁查询的列创建索引:根据SQL语句的执行计划,找出最常用于查询的列来建立索引。 2. 平衡读写性能:在考虑索引数量时,需要平衡读取速度和写入速度,避免过度索引。 3. 复合索引:对于多条件查询,可以创建...
并非所有的字段都需要建立索引,合理选择索引字段和类型对于优化数据库性能至关重要。以下是一些选择和优化索引的建议: - 为经常出现在WHERE子句中的字段创建索引。 - 对于频繁进行范围查询的字段,考虑使用聚集...
- 索引维护:索引会增加写操作的开销,频繁更新的列不宜建立索引。 - 存储空间:索引需要额外的存储空间,应权衡性能提升与存储成本。 四、索引优化策略 1. 唯一性:索引的唯一性有助于提高查询效率,避免冲突。 2....
而通过建立索引,数据库系统可以在查找数据时迅速定位到目标数据所在的位置,从而极大地提高查询速度。 #### 聚集索引与非聚集索引 在SQL Server中,主要提供了两种类型的索引——聚集索引(clustered index)和非...
当执行计划选择不理想时,例如选择全索引扫描而非利用索引进行范围扫描或部分行扫描,查询性能会受到影响。 优化索引的使用可以通过调整查询语句来实现。例如,在"orderbyid"查询的情况下,由于id是主键,数据页...
- `R`类与`public.xml`的关系表面上并不直接关联,但在实际使用中,我们通过`R.id`来查找资源,这就间接建立了联系。`public.xml`中的值对应于`resources.arsc`,而资源值则生成`R`类,使得通过`R`类的索引值可以...
(4)where 子句和索引:Oracle 根据用户在 where 子句中的定义找出满足查询要求的索引项(如根据一条 SQL 语句中的 where 和 and 部分指明的表列),检查可用的索引,选择能提供最快结果的索引。 (5)使用索引...
另一个常见的误区是,开发者往往没有考虑到索引对数据库性能的双刃剑效应。在不适当的场合建立索引不仅不能提高效率,反而会增加数据库维护的负担,占用存储空间,并降低写入操作的速度。因此,正确的做法是在充分...