摘要:有一天我遇到了一个同事的求助,他让我帮忙优化一个SQL,这个SQL执行时间很长。于是我查询了执行计划,发现这个SQL竟然要进行一次全表扫描。当时我查看了表的定义,发现在where子句中的条件列上是建了索引的,那为什么执行计划会显示全表扫描呢。这个问题困扰了我很长时间,于是后来我又看了看表的定义,发现了问题的根本所在,作为条件的字段是varchar,而SQL语句中的条件是一串数字!这样的话就会造成索引不可用,处理方法也很简单,加上一对单引号就可以了。 下面是语句和执行计划(这里做了简单化处理,只需要注意全表扫描就可以):select * from TEST t where t.spec_prp. 阅读全文
posted @ 2011-11-19 23:26 wingsless 阅读(4138) 评论(4) 推荐(2) 编辑
摘要:今天群里有朋友问什么是instance,什么是database。于是群友七嘴八舌的说了很多很理论很理论的东西,这些东西网上很多,如果提问者能看懂的话也就不问我们了。很显然,提问者刚刚接触oracle,这个问题是困扰oracle新丁的一个常见问题。我举个通俗易懂的例子,虽然不是很恰当,但是对于初学者理解instance和database很有帮助。我的C:\下放了一个文本文件:example.txt,这是个实际存在的物理文件,现在打开进程管理器,进程管理器中看不到什么和这儿文件有关系的进程。但是当我双击这个文本文件以后,进程管理器中就会出现notepad.exe。我可以通过记事本对example. 阅读全文
posted @ 2011-11-19 13:53 wingsless 阅读(1465) 评论(1) 推荐(1) 编辑
摘要:--查询LOB的大小和所在表空间SELECT A.TABLE_NAME, A.COLUMN_NAME, B.SEGMENT_NAME, B.SEGMENT_TYPE, B.TABLESPACE_NAME, round((B.BYTES / 1024 / 1024 / 1024),2) FROM USER_LOBS A, USER_SEGMENTS BWHERE A.SEGMENT_NAME = B.SEGMENT_NAMEORDER BY B.BYTES DESC;--查询查询一个表空间上所有表的大小select us.segmen... 阅读全文
posted @ 2011-11-19 13:19 wingsless 阅读(1356) 评论(0) 推荐(1) 编辑