Oracle中表建立联合索引后,其中的一个字段是否可以用来进行索引。

在Oracle中我给一个表的两个字段建立了联合索引,用来增加查询速度,如:whereid=?anduser_id=?[createindextable_id_userid... 在Oracle中我给一个表的两个字段建立了联合索引,用来增加查询速度,如:where id=? and user_id=? [create index table_id_userid on test_table(id,user_id)];然后又有一个查询语句是where id=? 那我创建的索引table_id_userid能否对where id=?这个查询语句管用???
在这种情况下(又两种查询方式)是应该只创建id的索引还是创建id,user_id的联合索引!
展开
 我来答
大宝妈谈教育
高粉答主

2020-05-03 · 关注我不会让你失望
知道小有建树答主
回答量:3306
采纳率:100%
帮助的人:49万
展开全部

1.打开Navicat,如下图所示。

2.右击oracle数据库,然后单击[打开连接]。

3.单击[other],然后单击[index],显示oracle数据库中的所有索引。

4.点击“新建索引”进入索引设计界面。

5.设置类型、表类型、表名、列名等。

6.在advanced选项卡中,设置表空间和记录等选项。

7.点击“保存”,输入索引名,然后点击“确定”。

TableDI
2024-07-18 广告
`VLOOKUP` 匹配出错误的数据通常是由于以下几个原因:1. **查找值错误**:输入的查找值与数据源中的值不匹配,可能是因为拼写错误、大小写不一致或存在不可见的字符。2. **查找区域设置错误**:查找区域的首列必须包含要查找的值,且... 点击进入详情页
本回答由TableDI提供
华夏日长兴
推荐于2017-09-02 · TA获得超过9592个赞
知道大有可为答主
回答量:6305
采纳率:85%
帮助的人:3653万
展开全部
1、表的主键、外键必须有索引;
2、数据量超过300的表应该有索引;
3、经常与其他表进行连接的表,在连接字段上应该建立索引;
4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
5、索引应该建在选择性高的字段上;
6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
A、正确选择复合索引中的主列字段,一般是选择性较好的字段;
B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;
E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;
8、频繁进行数据操作的表,不要建立太多的索引;
9、删除无用的索引,避免对执行计划造成负面影响;
以上是一些普遍的建立索引时的判断依据。一言以蔽之,索引的建立必须慎重,对每个索引的必要性都应该经过仔细分析,要有建立的依据。因为太多的索引与不充分、不正确的索引对性能都毫无益处:在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。另外,过多的复合索引,在有单字段索引的情况下,一般都是没有存在价值的;相反,还会降低数据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大。

看看这个你就明白了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
包飞风7B
2011-07-13 · TA获得超过1840个赞
知道小有建树答主
回答量:368
采纳率:100%
帮助的人:214万
展开全部
一个where id=? 另外一个 where id=? and user_id=? 那么这种情况下创建复合索引test_table(id,user_id)效率比较高(复合索引只访问一次,而单独建两个索引需要访问索引两次)还节省了存储资源,一般来说 复合索引使用的条件是where后面的列名顺序和索引创建时的顺序要一致,如果where后面有id的话 也可以用到这个复合索引,如果只是user_id而没有id的话是用不上这个复合索引的。 你可以查询执行计划或者做一个sql trace来查看复合索引和单独索引的效率情况,比如PL/SQ/ dev F5或者sqlplus 下set autot on 然后执行语句 或者
SQL>explain plan select * from test_table where id=? and user_id=?
SQL>select * from table(dbms_xplan.display);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
虔敬还爽口的雪花8698
2011-07-13 · TA获得超过7.2万个赞
知道大有可为答主
回答量:3万
采纳率:0%
帮助的人:2008万
展开全部
是可以的,只要oracle认为走索引是最好的成本,测试如下:

[oracle@gabriel ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jul 11 10:49:22 2011

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> drop table scott.test_index;

Table dropped.

SQL> create table scott.test_index as select object_id,object_name from dba_objects;

Table created.

SQL> conn scott/scott
Connected.
SQL> create index index_test on test_index(object_id,object_name);

Index created.

SQL> set autotrace traceonly;
SQL> analyze table test_index compute statistics;

Table analyzed.

SQL> select * from test_index where object_id=1;

no rows selected

Execution Plan
----------------------------------------------------------
Plan hash value: 3704158663

-------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 28 | 2 (0)| 00:00:01 |
|* 1 | INDEX RANGE SCAN| INDEX_TEST | 1 | 28 | 2 (0)| 00:00:01 |
-------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

1 - access("OBJECT_ID"=1)

Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
2 consistent gets
0 physical reads
0 redo size
339 bytes sent via SQL*Net to client
374 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
你看,where字句我只给了一个object id字段,但是执行计划显示index range scan
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
anlenshen
2012-09-20 · TA获得超过109个赞
知道答主
回答量:44
采纳率:100%
帮助的人:36.9万
展开全部
我晕,忘记登录了,楼主给分吧
是可以的,只要oracle认为走索引是最好的成本,测试如下:

[oracle@gabriel ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Jul 11 10:49:22 2011

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> drop table scott.test_index;

Table dropped.

SQL> create table scott.test_index as select object_id,object_name from dba_objects;

Table created.

SQL> conn scott/scott
Connected.
SQL> create index index_test on test_index(object_id,object_name);

Index created.

SQL> set autotrace traceonly;
SQL> analyze table test_index compute statistics;

Table analyzed.

SQL> select * from test_index where object_id=1;

no rows selected

Execution Plan
----------------------------------------------------------
Plan hash value: 3704158663

-------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 28 | 2 (0)| 00:00:01 |
|* 1 | INDEX RANGE SCAN| INDEX_TEST | 1 | 28 | 2 (0)| 00:00:01 |
-------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

1 - access("OBJECT_ID"=1)

Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
2 consistent gets
0 physical reads
0 redo size
339 bytes sent via SQL*Net to client
374 bytes received via SQL*Net from client
1 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
0 rows processed
你看,where字句我只给了一个object id字段,但是执行计划显示index range scan ,前提是object id字段是联合索引的前导列,如果用object name来查询那么就不走了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式