oracle怎么去掉索引 oracle中删除索引

oracle删除某个表的索引的sql语句删除掉table_name中oracle怎么去掉索引的索引index_name的SQL语句如下oracle怎么去掉索引:
DROP INDEX index_name ON talbe_name
oracle中如何删除已建立的索引1、打开Navicatoracle怎么去掉索引,右击oracle数据库oracle怎么去掉索引,然后点击【打开连接】 。
2、点击【其它】oracle怎么去掉索引 , 然后点击【索引】,此时显示oracle数据库中所有oracle怎么去掉索引的索引 。
3、右击要删除的索引,然后选择【设计索引】 。
4、核实索引内容,以免错删 。
5、右击要删除的索引,然后选择【删除索引】 。
6、最后勾选【确定】,然后点击【删除】 。
【oracle怎么去掉索引 oracle中删除索引】7、此时该索引就删除oracle怎么去掉索引了 。
怎么在数据库中删除已经添加的某个索引删除索引可以使用ALTER TABLE或DROP INDEX语句来实现,DROP INDEX可以在ALTER TABLE内部作为一条语句处理 , 其格式如下:
DROP INDEX index_name ON talbe_name
ALTER TABLE table_name DROP INDEX index_name
ALTER TABLE table_name DROP PRIMARY KEY
注:其中 , 前两条语句是等价的,删除掉table_name中的索引index_name 。
扩展资料:
索引的使用及注意事项
EXPLAIN可以帮助开发人员分析SQL问题,explain显示了mysql如何使用索引来处理select语句以及连接表,可以帮助选择更好的索引和写出更优化的查询语句 。
使用方法,在select语句前加上Explain就可以了:Explain select * from user where id=1;
尽量避免这些不走索引的sql:
SELECT `sname` FROM `stu` WHERE `age` 10=30;-- 不会使用索引,因为所有索引列参与了计算
SELECT `sname` FROM `stu` WHERE LEFT(`date`,4) 1990; -- 不会使用索引,因为使用了函数运算,原理与上面相同
SELECT * FROM `houdunwang` WHERE `uname` LIKE'后盾%' 走索引
SELECT * FROM `houdunwang` WHERE `uname` LIKE "%后盾%" 不走索引
正则表达式不使用索引,这应该很好理解,所以为什么在SQL中很难看到regexp关键字的原因 。
字符串与数字比较不使用索引;
CREATE TABLE `a` (`a` char(10));
EXPLAIN SELECT * FROM `a` WHERE `a`="1" 走索引
EXPLAIN SELECT * FROM `a` WHERE `a`=1 不走索引
Oracle数据库强制索引 当where子句对某一列使用函数时 除非利用这个简单的技术强制索引 否则Oracle优化器不能在查询中使用索引
通常情况下 如果在WHERE子句中不使用诸如UPPER REPLACE 或SUBSTRD等函数 就不能对指定列建立特定的条件 但如果使用了这些函数 则会出现一个问题 这些函数会阻碍Oracle优化器对列使用索引 因而与采用索引的情况相比较 查询会花费更多的时间
庆幸的是 如果在使用函数的这些列中包含了字符型数据 可以用这样一种方法修改查询语句 以达到强制性使用索引 更有效地运行查询 这篇文章介绍了涉及的技术 并说明了在两种典型情况下怎样实现
大小写混合情况
在讨论由于函数修改了列的内容 如何强制使用索引前 让我们首先看看为什么Oracle优化器在这种情况下不能使用索引 假定我们要搜寻包含了大小写混合的数据 如在表 中ADDRESS表的NAME列 因为数据是用户输入的 我们无法使用已经统一改为大写的数据 为了找到每一个名为john的地址 我们使用包含了UPPER子句的查询语句 如下所示
SQL select address from address where upper(name) like JOHN ;
在运行这个查询语句前 如果我们运行了命令 set autotrace on 将会得到下列结果 其中包含了执行过程
ADDRESS cleveland row selected Execution Plan SELECT STATEMENT TABLE ACCESS FULL ADDRESS
可以看到 在这种情况下 Oracle优化器对ADDRESS 表作了一次完整的扫描 而没有使用NAME 列的索引 这是因为索引是根据列中数据的实际值建立的 而UPPER 函数已经将字符转换成大写 即修改了这些值 因此该查询不能使用这列的索引 优化器不能与索引项比较 JOHN 没有索引项对应于 JOHN 只有 john
值得庆幸的是 如果在这种情况下想要强制使用索引 有一种简便的方法 只要在WHERE 子句中增加一个或多个特定的条件 用于测试索引值 并减少需要扫描的行 但这并没有修改原来SOL 编码中的条件 以下列查询语句为例
SQL select address from address where upper(name) like JO% AND (name like J% or name like j% );
使用这种查询语句(已设置AUTOTRACE) 可得到下列结果
ADDRESS cleveland row selected Execution Plan SELECT STATEMENT CONCATENATION TABLE ACCESS BY INDEX ROWID ADDRESS INDEX RANGE SCAN ADDRESS_I TABLE ACCESS BY INDEX ROWID ADDRESS INDEX RANGE SCAN ADDRESS_I
现在 优化器为WHERE 子句中AND 联结的两个语句中每一个语句确定的范围进行扫描 第二个语句没有引用函数 因而使用了索引 在两个范围扫描后 将运行结果合并
在这个例子中 如果数据库有成百上千行 可以用下列方法扩充WHERE 子句 进一步缩小扫描范围
select address from address where upper(name) like JOHN AND (name like JO% or name like jo% or name like Jo or name like jO );
得到的结果与以前相同 但是 其执行过程如下所示 表明有 个扫描范围
Execution Plan SELECT STATEMENT CONCATENATION TABLE ACCESS BY INDEX ROWID ADDRESS INDEX RANGE SCAN ADDRESS_I TABLE ACCESS BY INDEX ROWID ADDRESS INDEX RANGE SCAN ADDRESS_I TABLE ACCESS BY INDEX ROWID ADDRESS INDEX RANGE SCAN ADDRESS_I TABLE ACCESS BY INDEX ROWID ADDRESS INDEX RANGE SCAN ADDRESS_I
如果试图进一步提高查询速度 我们可以在特定的 name like 条件中指明 个或更多的字符 然而 这样做会使得WHERE子句十分笨重 因为需要大小写字符所有可能的组合 joh Joh jOh joH等等 除此之外 指定一个或两个字符已足以加快查询的运行速度了
现在让我们看看 当我们引用不同的函数时 怎样运用这个基本技术
使用REPLACE的情况
正如名字不总是以大写输入一样 电话号码也会以许多格式出现 如 ( ) 等等
如果在列名为 PHONE_NUMBER中搜寻上述号码时 可能需要使用函数REPLACE以保证统一的格式 如果在PHONE_NUMBER列中只包含空格 连字符和数字 where 子句可以如下所示
WHERE replace(replace(phone_number ) ) =
WHERE子句两次使用REPLACE 函数去掉了连字符和空格 保证了电话号码是简单的数字串 然而 该函数阻止了优化器在该列使用索引 因此 我们按如下方法修改WHERE子句 以强制执行索引
WHERE replace(replace(phone_number ) ) = AND phone_number like %
如果我们知道数据中可能包含圆括号 WHERE 子句会稍微复杂一点 我们可以再增加REPLACE 函数(去掉圆括号 连字符和空格) 按如下所示扩充增加的条件
WHERE replace(replace(replace(replace(phone_number ) ) ( ) ) ) = AND (phone number like % or phone_number like ( % )
该例强调了巧妙地选用WHERE 子句条件的重要性 而且 这些条件不会改变查询结果 你的选择应基于完全了解该列中存在的信息类型 在该例中 我们需要知道 PHONE_NUMBER 数据中存在几种不同的格式 这样 我们能够修改WHERE 子句而不会影响查询结果
正确的条件 lishixinzhi/Article/program/Oracle/201311/18519
如何让ORACLE索引不起作用你是想让某一个索引不起作用,还是全部索引不起作用,如果是全部索引,也就是说你要走全表扫描,那么用hint就行,如果让某一个索引不起作用,用另外一个索引,那么也可以用hint指定 。
比如:
不走任何索引(全表扫描):
SELECT /*FULL(A) */ EMP_NO,EMP_NAM FROM BSEMPMS A WHERE EMP_NO='SCOTT'
不走某一个索引:
将上文的/*FULL(A) */换为/*NO_INDEX(TABLE INDEX1, index2) */
走某一个索引
将上文的/*FULL(A) */换为/*INDEX(TABLE INDEX1, index2) */
hint还有很多用法,你可以慢慢查 。
如果索引是在没用那么就drop掉 。让他永远无效,我觉得还不如drop掉呢 。省的留下来烦心 。
oracle 全文索引怎么删除一 查看索引名select * from user_indexes;二 删除索引drop index index_name;
关于oracle怎么去掉索引和oracle中删除索引的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读