函数索引使用之部分记录建索引
以前没有接触到,的确是sql优化很经典的方法 假设有这样一个情况,在一个表中的某一个字段的某一个相对于其他经常使用,但是表的记录比较大,我们就可以使用这种方法具体的实例如下: SQL drop table t purge;表已删除。SQL set autotrace offSQL create tabl
以前没有接触到,的确是sql优化很经典的方法假设有这样一个情况,在一个表中的某一个字段的某一个值相对于其他值经常使用,但是表的记录比较大,我们就可以使用这种方法 具体的实例如下:
SQL> drop table t purge; 表已删除。 SQL> set autotrace off SQL> create table t (id int ,status varchar2(2)); 表已创建。
--建立普通索引 SQL> create index id_normal on t(status); 索引已创建。 SQL> insert into t select rownum ,'Y' from dual connect by rownum<=1000000; 已创建1000000行。 SQL> insert into t select 1 ,'N' from dual; 已创建 1 行。 SQL> commit; --进行表分析 SQL> analyze table t compute statistics for table for all indexes for all indexe d columns;
--当使用普通索引性能如下 SQL> set linesize 1000 SQL> set autotrace traceonly SQL> select * from t where status='N'; SQL> select * from t where status='N'; 执行计划 ---------------------------------------------------------- Plan hash value: 2252729315 -------------------------------------------------------------------------------- --------- | Id | Operation | Name | Rows | Bytes | Cost (%CPU)| T ime | -------------------------------------------------------------------------------- --------- | 0 | SELECT STATEMENT | | 1 | 10 | 4 (0)| 0 0:13:35 | | 1 | TABLE ACCESS BY INDEX ROWID| T | 1 | 10 | 4 (0)| 0 0:13:35 | |* 2 | INDEX RANGE SCAN | ID_NORMAL | 1 | | 3 (0)| 0 0:10:11 | -------------------------------------------------------------------------------- --------- Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("STATUS"='N') 统计信息 ---------------------------------------------------------- 1 recursive calls 0 db block gets 5 consistent gets --产生5个逻辑读 0 physical reads 0 redo size 595 bytes sent via SQL*Net to client 519 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed
--查看索引的详细信息 SQL> set autotrace off SQL> analyze index id_normal validate structure; 索引已分析 SQL> select name,btree_space,lf_rows,height from index_stats; NAME BTREE_SPACE LF_ROWS HEIGHT ------------------------------ ----------- ---------- ---------- ID_NORMAL 22600352 1000001 3 SQL> set autotrace off SQL> analyze index id_normal validate structure; 索引已分析 SQL> select name,btree_space,lf_rows,height from index_stats; NAME BTREE_SPACE LF_ROWS HEIGHT ------------------------------ ----------- ---------- ---------- ID_NORMAL 22600352 1000001 3 --产生的索引的详细信息
--建函数索引 SQL> drop index id_normal; 索引已删除。 SQL> create index id_status on t (Case when status= 'N' then 'N' end); /* select * from t where (case when status='N' then 'N' end)='N' 可以使用这种写法代替上面的写法
*/ 索引已创建。SQL>分析表 t 计算表中所有索引列的统计信息;
--查看函数索引的性能
SQL>设置自动跟踪仅跟踪 SQL> select * from t where (status='N' then 'N' end)='N'; 执行计划 -------------------------------------------------- -------- 计划哈希值:1835552001 -------------------------------------------------- ------------------------------ --------- |身份证 |运营|名称 |行|字节 |成本(%CPU)|时间 | -------------------------------------------------- ------------------------------ --------- | 0 |选择语句 | | 1 | 10 | 10 2 (0)| 0 0:06:48 | 0 0:06:48 | 1 |按索引 ROWID 访问表| T | 1 | 10 | 10 2 (0)| 0 0:06:48 | 0 0:06:48 |* 2 |指数范围扫描 | ID_状态| 1 | | 1 (0)| 0 0:03:24 | 0 0:03:24 -------------------------------------------------- ------------------------------ --------- 谓词信息(通过操作id标识): -------------------------------------------------- - 2 - 访问(案例“状态”当'N'然后'N'结束='N') 统计信息 -------------------------------------------------- -------- 15 次递归调用 0 db 块获取 2 一致获取 0 物理读取 0 重做大小 通过 SQL*Net 发送到客户端的 591 字节 通过 SQL*Net 从客户端接收到 519 字节 往返客户端的 2 次 SQL*Net 往返 0 种(内存) 0 种(磁盘) 已处理 1 行
--连接观察函数索引的情况 SQL>设置自动跟踪关闭 SQL>分析索引id_status验证结构; 索引已分析 SQL>从index_stats中选择名称、btree_space、lf_rows、高度; 名称 BTREE_SPACE LF_ROWS 高度 ------------------------------ ----------- --------- - ---------- ID_STATUS 8000 1 1 --函数索引的要少很多
使用函数索引减少了逻辑读取,一定程度提高了sql的性能。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Go语言提供了两种动态函数创建技术:closures和反射。closures允许访问闭包作用域内的变量,而反射可使用FuncOf函数创建新函数。这些技术在自定义HTTP路由器、实现高度可定制的系统和构建可插拔的组件方面非常有用。

在C++函数命名中,考虑参数顺序至关重要,可提高可读性、减少错误并促进重构。常见的参数顺序约定包括:动作-对象、对象-动作、语义意义和遵循标准库。最佳顺序取决于函数目的、参数类型、潜在混淆和语言惯例。

1、 SUM函数,用于对一列或一组单元格中的数字进行求和,例如:=SUM(A1:J10)。2、AVERAGE函数,用于计算一列或一组单元格中的数字的平均值,例如:=AVERAGE(A1:A10)。3、COUNT函数,用于计算一列或一组单元格中的数字或文本的数量,例如:=COUNT(A1:A10)4、IF函数,用于根据指定的条件进行逻辑判断,并返回相应的结果。

C++函数中默认参数的优点包括简化调用、增强可读性、避免错误。缺点是限制灵活性、命名限制。可变参数的优点包括无限灵活性、动态绑定。缺点包括复杂性更高、隐式类型转换、调试困难。

C++中的函数返回引用类型的好处包括:性能提升:引用传递避免了对象复制,从而节省了内存和时间。直接修改:调用方可以直接修改返回的引用对象,而无需重新赋值。代码简洁:引用传递简化了代码,无需额外的赋值操作。

C++中的异常处理可通过定制异常类增强,提供特定错误消息、上下文信息以及根据错误类型执行自定义操作。定义继承自std::exception的异常类,提供特定的错误信息。使用throw关键字抛出定制异常。在try-catch块中使用dynamic_cast将捕获到的异常转换为定制异常类型。实战案例中,open_file函数抛出FileNotFoundException异常,捕捉并处理该异常可提供更具体的错误消息。

自定义PHP函数与预定义函数的区别在于:作用域:自定义函数仅限于其定义范围,而预定义函数可在整个脚本中访问。定义方式:自定义函数使用function关键字定义,而预定义函数由PHP内核定义。参数传递:自定义函数接收参数,而预定义函数可能不需要参数。扩展性:自定义函数可以根据需要创建,而预定义函数是内置的且无法修改。
