`

NULL 值与索引(二)

 
阅读更多
NULL值与索引(一)中讲述了null值与索引的一些基本情况。其主要的内容为,基于允许存在null值的索引列,其索引值不会被存储;其次
是由于这个特性导致了我们在使用is null时索引失效的情形;最后则是描述的通过为null值列添加not null约束来使得is null走索引。尽管我
们可以通过添加not null来解决is null走索引,当现实中的情况是仍然很多列根本是无法确定的,而必须保持其null特性。对于此种情形该如
何解决呢?

一、通过基于函数的索引来使得is null使用索引
二、使用伪列创建基于函数的索引来使得is null使用索引
三、NULL值与索引衍生特性
四、总结
1、对于用于连接或经常被谓词使用到的列应尽可能避免NULL值属性,因为它容易导致索引失效。
2、为需要使用NULL值的列添加缺省值(alter table tb modify(col default 'Y'))。
3、如果NULL值不可避免也不能使用缺省值,应考虑为该常用列使用nvl函数创建索引,或使用伪列来创建索引以提高查询性能。
4、对于复合索引应保证索引中至少有一列不为NULL值,还是因为全部列为NULL时不被索引存储,以保证使用is null是可以使用索引。
5、对于复合索引应保证索引列应使用数据类型长度最小的列来添加not null约束应节省磁盘空间。

五、更多参考

NULL 值与索引(一)

SQL tuning 步骤

高效SQL语句必杀技

父游标、子游标及共享游标

绑定变量及其优缺点

dbms_xplan之display_cursor函数的使用

dbms_xplan之display函数的使用

执行计划中各字段各模块描述

使用 EXPLAIN PLAN 获取SQL语句执行计划

启用 AUTOTRACE 功能

函数使得索引列失效

Oracle 绑定变量窥探

Oracle 自适应共享游标


分享到:
评论

相关推荐

    MySQL索引失效的几种情况汇总

    更准确的说,单列索引不存储null值,复合索引不存储全为null的值。索引不能存储Null,所以对这列采用is null条件时,因为索引上根本 没Null值,不能利用到索引,只能全表扫描。 为什么索引列不能存Null值? 将索引列...

    关于MySQL索引的几点值得注意的事项

    更准确的说,单列索引不存储null值,复合索引不存储全为null的值。索引不能存储Null,所以对这列采用is null条件时,因为索引上根本 没Null值,不能利用到索引,只能全表扫描。 为什么索引列不能存Null值? 将...

    Mysql原理(二):索引的底层原理

    主键索引: 列值唯一(不可以有null)并且 表中只有一个 联合索引:多列组成一个索引 全文索引:对文本的内容进行分词,进行搜索 聚簇索引: 值的逻辑顺序和表数据行的顺序数据相同; 聚簇索引默认是主键,如果表中没有...

    SongyangJi#JavaBooks#索引1

    索引种类再说一下索引种类:普通索引:仅加速查询唯一索引:加速查询 + 列值唯一(可以有null)主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有

    mysql 中存在null和空时创建唯一索引的方法

    此时创建唯一索引时要注意了,此时数据库会把空作为多个重复值,而创建索引失败,示例如下: 步骤1: mysql> select phone ,count(1) from User group by phone; +—————–+———-+ | phone | count(1) | +——...

    xueyubao#JavaBooks#索引种类1

    索引种类普通索引:仅加速查询唯一索引:加速查询 + 列值唯一(可以有null)主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个组合索引:多列

    Mysql建表与索引使用规范详解

    二、 MySQL建表,字段需NULL时,需设置字段默认值,默认值不为NULL。三、 MySQL建表,如果字段等价于外键,应在该字段加索引。四、 MySQL建表,不同表之间的相同属性值的字段,列类型,类型长度,是否非空,是否...

    MySQL索引之主键索引

    一个表可以没有主键,但最多只能有一个主键,并且主键值不能包含NULL。 在MySQL中,InnoDB数据表的主键设计我们通常遵循几个原则: 1、采用一个没有业务用途的自增属性列作为主键; 2、主键字段值总是不更新,只有...

    MySQL 的覆盖索引与回表的使用方法

    两大类索引 使用的存储引擎:MySQL5.7 InnoDB 聚簇索引 * 如果表设置了主键,则主键就是聚...普通索引也叫二级索引,除聚簇索引外的索引,即非聚簇索引。 InnoDB的普通索引叶子节点存储的是主键(聚簇索引)的值,而My

    Oracle复合索引与空值的索引使用问题小结

    --A,B都没有not null约束,A列无空值,B列有空值。--存在复合索引IX_TEST(A,B) 于是手动测试,环境采用Oracle自带的scott用户下的emp表。 1.首先查看如下语句的执行计划(此时表只有主键索引): 2.添加IX_TEST...

    MySQL Innodb 存储结构 和 存储Null值 用法详解

    独享表空间包括:数据,索引,插入缓存,数据字典。共享表空间包括:Undo信息(不会回收<物理空间上>),双写缓存信息,事务信息等。 段(segment):组成表空间,有区组成。 区(extent):有64个连续的页组成。...

    MySQL中的唯一性约束与NULL详解

    这时 A,B,C 三列都是不允许 NULL 值的,唯一性约束也是 work 的。 后来由于需求的变化,修改了以前的唯一性约束,又多加了一列。(至于为什么加就不赘述了)。 ALTER TABLE testTable DROP INDEX IDX_UN_LOAN_PLAN_...

    Oracle 开发经验

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。...可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 等。。。。

    OA办公系统数据库字典.pdf

    1.1.1.1 表 表名 address 主关键字 ADD_ID 索引字段 字段名称 字段含义 字段类型 初始值 备注 ADD_ID 编号 int(11) not null USER_ID varchar(20) not null GROUP_ID int(11) not null 0 PSN_NAME varchar(120) not ...

    怎样提高数据库的查询效率

    用于网络开发进行数据库调优 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上...可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0

    MySQL学习笔记(2)——索引

    文章目录索引简介是什么:目的:缺点:索引分类单值索引:唯一索引:复合索引:索引性能分析(explain)索引优化单表情况双表情况内连接左外连接索引优化法则(技巧)1.尽量全值匹配2.最佳左前缀法则3.不在建索引的列...

    MySQL海量数据查询优化策略.

    MySQL海量数据查询优化策略,方法。 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by ... 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:  select id from t where num=0

Global site tag (gtag.js) - Google Analytics