oracle的普通视图不能创建索引,下面是一个测试。
oracle版本:Oracle9i Enterprise Edition Release 9.2.0.6.0
使用sale表,表结构如下:
SQL> desc sale;
Name Type Nullable Default Comments
—– ——- ——– ——- ——–
MONTH CHAR(6) Y
SELL NUMBER Y
More …
当where子句对某一列使用函数时,除非利用这个简单的技术强制索引,否则Oracle优化器不能在查询中使用索引。
通常情况下,如果在WHERE子句中不使用诸如UPPER、REPLACE 或SUBSTRD等函数,就不能对指定列建立特定的条件。但如果使用了这些函数,则会出现一个问题:这些函数会阻碍Oracle优化器对列使用索引,因而与采用索引的情况相比较,查询会花费更多的时间。
庆幸的是,如果在使用函数的这些列中包含了字符型数据,可以用这样一种方法修改查询语句,以达到强制性使用索引,更有效地运行查询。这篇文章介绍了涉及的技术,并说明了在两种典型情况下怎样实现。
More …
函数索引的概念:
基于函数的索引也是8i以来的新产物,它有索引计算列的能力,它易于使用并且提供计算好的值,在不修改应用程序的逻辑上提高了查询性能。使用基于函数的索引有几个先决条件:
(1)
必须拥有QUERY REWRITE(本模式下)或GLOBAL QUERY REWRITE(其他模式下)权限。
(2)
必须使用基于成本的优化器,基于规则的优化器将被忽略。
(3)
必须设置以下两个系统参数:
- QUERY_REWRITE_ENABLED=TRUE
- QUERY_REWRITE_INTEGRITY=TRUSTED
由于SQL优化起来比较复杂,并且还会受环境限制,在开发过程中,写SQL必须必须要遵循以下几点的原则:
1.ORACLE采用自下而上的顺序解析WHERE子句,根据这个原理,表之间的连接必须写在其他WHERE条件之前,那些可以过滤掉最大数量记录的条件必须写在WHERE子句的末尾。
例如:
(低效)
SELECT … FROM emp e
WHERE SAL > 50000 AND JOB = ‘MANAGER’ AND 25 < (SELECT COUNT(*) FROM emp WHERE mgr=e.empno);
(高效)
SELECT … FROM emp e
WHERE 25 < (SELECT COUNT(*) FROM emp WHERE mgr=e.empno) AND SAL > 50000 AND JOB = ‘MANAGER’;
More …
Oracle提供了大量索引选项。知道在给定条件下使用哪个选项对于一个应用程序的性能来说非常重要。一个错误的选择可能会引发死锁,并导致数据库性能急剧下降或进程终止。而如果做出正确的选择,则可以合理使用资源,使那些已经运行了几个小时甚至几天的进程在几分钟得以完成,这样会使您立刻成为一位英雄。这篇文章就将简单的讨论每个索引选项。主要有以下内容:
查询DBA_INDEXES视图可得到表中所有索引的列表,注意只能通过USER_INDEXES的方法来检索模式(schema)的索引。访问USER_IND_COLUMNS视图可得到一个给定表中被索引的特定列。
通过下面的语句可以查看所有的索引信息:
select * from user_indexes;
More …
含义解释:
1、rownum是oracle系统为从查询返回的行顺序分配的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数。
2、rownum不能以任何基表的名称作为前缀。
More …
1、trackback是什么?
track的英文释义为轨迹,back的英文释义为回调,拼接在一起就是trackback,同程序语言中的callback概念类似。很形象的说明了这种机制是反向的将独立blog串联成线进而编织成网的机制。trackback翻译成中文成了“引用通告”。
简单的说,就是如果你写的文章是根据其他人Blog中的文章而做出的延伸或评论,你可以通知对方你针对他的文章写了东西,这就需要用到引用通告。在以往我们的经验当中,您对他人日志文章的评论只能在他人文章后通过回复进行,这样做让我们只能在别人的地盘上活动,而不能自己掌握自己的发表的言论,这就带来一些麻烦。
More …
视图简介:
视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表。视图是存储在数据字典里的一条select语句。 通过创建视图可以提取数据的逻辑上的集合或组合。
视图的优点:
1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。
2.用户通过简单的查询可以从复杂查询中得到结果。
3.维护数据的独立性,试图可从多个表检索数据。
4.对于相同的数据可产生不同的视图。
视图的分类:
视图分为简单视图和复杂视图。
两者区别如下:
1.简单视图只从单表里获取数据,复杂视图从多表获取数据;
2.简单视图不包含函数和数据组,复杂视图包含;
3.简单视图可以实现DML操作,复杂视图不可以。
More …
连接概述
关系数据库中所有的数据均以明确的数据值存在于它的字段中,表之间所有可能的关系都是通过匹配相关字段的内容来形成的。连接提供了一个强大的工具来生成数据库中的数据关系。事实上,因为关系数据库不包含指针或其他关联记录与记录的机制,连接是生成跨表数据关系的唯一机制。
通过匹配相关字段的内容来形成一对一对的记录的过程称为连接表。结果表(包含两个源表的数据)称为两表之间的一个连接。
连接的数学基础
连接是对两个表的数据进行更通用的组合的一种特殊情况。…待补充…
More …
来源:网络
作者:未知
首先作者给出了如下的sql查询语句执行顺序
(8) select (9) distinct (11)
(1) from
(3)
(4) where
(5)group by
(6) with {cube|rollup}
(7)having(having_condition)
(10) order by
More …