sql – Oracle:单个多列索引或两个单列索引
|
我有桌子 create table1( column1 number(10,column2 number(10),column3 number(10) ); column1是主键 我在2列上创建了唯一约束 alter table table1
add constraint table1_contr1 unique(column1,column2)
using index tablespace tbs1;
当我在两个列上创建索引时 create index table1_idx1 on table1(column1,coulmn2); ERROR at line 1: ORA-01408: such column list already indexed 因此Oracle在创建唯一约束时已经创建了索引.但如果我单独创建索引,它就会接受这些索引 create index table1_idx1 on table1(column1); create index table2_idx2 on table2(column2); 现在我的问题是,在对两列都有唯一约束后,我还需要担心在每列上创建索引吗?在访问对象时,每列上没有索引会对性能产生影响吗? 这是在oracle 11R2上. 解决方法这取决于…如果你已经在column1,column2上有一个复合索引,那么只有column1的索引才有可能是有益的.由于column1是前导索引,因此针对只有column1作为谓词的表的查询将能够使用复合索引.如果您经常运行需要对索引进行完全扫描的查询,并且column2的存在会大大增加索引的大小,那么只有column1上的索引可能会更高效,因为完整的索引扫描需要少做I / O.但这是一个非常不寻常的情况. 如果针对该表的某些查询仅在column2上指定谓词,则只有column2的索引可能是有益的.如果column1的相对较少的不同值,Oracle可能会使用复合索引执行索引跳过扫描,以满足仅将column2指定为谓词的查询.但是跳过扫描的效率可能远低于范围扫描,因此有可能只有column2上的索引才会使这些查询受益.如果column1存在大量不同的值,则跳过扫描效率会更低,而只有column2的索引会更有用.当然,如果您从未使用column2查询表而不在column1上指定谓词,则不需要仅在column2上使用索引. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql – 如果使用slick将列值设置为“None”,则插入默认值
- SQL Server – 在预期条件的上下文中指定的非布尔类型的表达
- sql-server-2005 – SSIS 2005中BufferTempStoragePath的默
- SQL2005CLR函数扩展 - 关于山寨索引
- SQL,计入多列然后分组
- mysql错误处理之ERROR 1786 (HY000)
- 修改mysql密码与忘记mysql密码的处理方法
- sql – rails控制台和Rails服务器日志中的输出颜色是什么意
- sql-server – 检查是否存在EXISTS优于COUNT! ……不是吗?
- 使用带有Teradata的Proc sql在SAS中编写高效查询
- sql – Windows Server 2012林和域功能级别兼容性
- sql-server – 如何在SQL Server 2008中强制删除
- Java分布式锁的三种实现方案
- 是EAV – 混合不好的数据库设计选择
- sql – GROUP BY子句之后的Oracle CONNECT BY子句
- 返回每组的前N行(Vertica / vsql)
- sql-server – create function必须是批处理中唯
- linq-to-sql – LinqToSql和全文搜索 – 可以做到
- Mysql数据库使用concat函数执行SQL注入查询
- SQL Server insert into tbl() select * from tb
