seo站长工具查询系统,深圳宝安区住建局官网,小程序推广方式,深圳做棋牌网站建设找哪家效益快简介 1.说明 1#xff09;索引是数据库对象之一#xff0c;用于加快数据的检索#xff0c;类似于书籍的索引。在数据库中索引可以减少数据库程序查询结果时需要读取的数据量#xff0c;类似于在书籍中我们利用索引可以不用翻阅整本书即可找到想要的信息。 2#xff09;索引…简介 1.说明 1索引是数据库对象之一用于加快数据的检索类似于书籍的索引。在数据库中索引可以减少数据库程序查询结果时需要读取的数据量类似于在书籍中我们利用索引可以不用翻阅整本书即可找到想要的信息。 2索引是建立在表上的可选对象索引的关键在于通过一组排序后的索引键来取代默认的全表扫描检索方式从而提高检索效率 3索引在逻辑上和物理上都与相关的表和数据无关当创建或者删除一个索引时不会影响基本的表 4索引一旦建立在表上进行DML操作时例如在执行插入、修改或者删除相关操作时oracle会自动管理索引索引删除不会对表产生影响 5索引对用户是透明的无论表上是否有索引sql语句的用法不变 6oracle创建主键时会自动在该列上创建索引 索引原理 1. 若没有索引搜索某个记录时例如查找namewish需要搜索所有的记录因为不能保证只有一个wish必须全部搜索一遍 2. 若在name上建立索引oracle会对全表进行一次搜索将每条记录的name值哪找升序排列然后构建索引条目name和rowid存储到索引段中查询name为wish时即可直接查找对应地方 3.创建了索引并不一定就会使用oracle自动统计表的信息后决定是否使用索引表中数据很少时使用全表扫描速度已经很快没有必要使用索引 索引使用创建、修改、删除、查看 1.创建索引语法 CREATE [UNIQUE] | [BITMAP] INDEX index_name --unique表示唯一索引
ON table_name([column1 [ASC|DESC],column2 --bitmap创建位图索引
[ASC|DESC],…] | [express])
[TABLESPACE tablespace_name]
[PCTFREE n1] --指定索引在数据块中空闲空间
[STORAGE (INITIAL n2)]
[NOLOGGING] --表示创建和重建索引时允许对表做DML操作默认情况下不应该使用
[NOLINE]
[NOSORT]; --表示创建索引时不进行排序默认不适用如果数据已经是按照该索引顺序排列的可以使用 2.修改索引 1重命名索引 alter index index_sno rename to bitmap_index; 2) 合并索引表使用一段时间后在索引中会产生碎片此时索引效率会降低可以选择重建索引或者合并索引,合并索引方式更好些无需额外存储空间代价较低 alter index index_sno coalesce; 3)重建索引 方式一删除原来的索引重新建立索引 方式二 alter index index_sno rebuild; 3.删除索引 drop index index_sno; 4.查看索引 select index_name,index-type, tablespace_name, uniqueness from all_indexes where table_name tablename;-- eg:
create index index_sno on student(name);
select * from all_indexes where table_namestudent; 索引分类 1. B树索引默认索引保存讲过排序过的索引列和对应的rowid值 1说明 1.oracle中最常用的索引B树索引就是一颗二叉树叶子节点双向链表包含索引列和指向表中每个匹配行的ROWID值 2.所有叶子节点具有相同的深度因而不管查询条件怎样查询速度基本相同 3.能够适应精确查询、模糊查询和比较查询 2分类 UNIQUE,NON-UNIQUE(默认),REVERSE KEY数据列中的数据是反向存储的 3创建例子 craete index index_sno on student(sno); 4适合使用场景 列基数列不重复值的个数大时适合使用B数索引 2. 位图索引 1说明 1.创建位图索引时oracle会扫描整张表并为索引列的每个取值建立一个位图位图中对表中每一行 使用一位bit0或者1来标识该行是否包含该位图的索引列的取值如果为1表示对应的rowid所在的记录包含该位图索引列值最后通过位图索 引中的映射函数完成位到行的ROWID的转换 2)创建例子 create bitmap index index_sno on student(sno); 3) 适合场景 对于基数小的列适合简历位图索引例如性别等 3.单列索引和复合索引基于多个列创建 1) 注意 即如果索引建立在多个列上只有它的第一个列被where子句引用时优化器才会使用该索引即至少要包含组合索引的第一列 4. 函数索引 1)说明 1. 当经常要访问一些函数或者表达式时可以将其存储在索引中这样下次访问时该值已经计算出来了可以加快查询速度 2. 函数索引既可以使用B数索引也可以使用位图索引当函数结果不确定时采用B树索引结果是固定的某几个值时使用位图索引 3. 函数索引中可以水泥用len、trim、substr、upper每行返回独立结果不能使用如sum、max、min、avg等 2例子 create index fbi on student (upper(name));
select * from student where upper(name) WISH; 索引建立原则总结 1. 如果有两个或者以上的索引其中有一个唯一性索引而其他是非唯一这种情况下oracle将使用唯一性索引而完全忽略非唯一性索引 2. 至少要包含组合索引的第一列即如果索引建立在多个列上只有它的第一个列被where子句引用时优化器才会使用该索引 3. 小表不要简历索引 4. 对于基数大的列适合建立B树索引对于基数小的列适合简历位图索引 5. 列中有很多空值但经常查询该列上非空记录时应该建立索引 6. 经常进行连接查询的列应该创建索引 7. 使用create index时要将最常查询的列放在最前面 8. LONG可变长字符串数据最长2G和LONG RAW可变长二进制数据最长2G列不能创建索引 9.限制表中索引的数量创建索引耗费时间并且随数据量的增大而增大索引会占用物理空间当对表中的数据进行增加、删除和修改的时候索引也要动态的维护降低了数据的维护速度 注意事项 1. 通配符在搜索词首出现时oracle不能使用索引eg --我们在name上创建索引create index index_name on student(name);--下面的方式oracle不适用name索引select * from student where name like %wish%;--如果通配符出现在字符串的其他位置时优化器能够利用索引如下select * from student where name like wish%; 2. 不要在索引列上使用not可以采用其他方式代替如下oracle碰到not会停止使用索引而采用全表扫描 select * from student where not (score100);select * from student where score 100;--替换为select * from student where score100 or score 100 3. 索引上使用空值比较将停止使用索引 eg select * from student where score is not null; 转载于:https://www.cnblogs.com/Soprano/p/10659424.html