1:添加注释
2:减少数据库连接
3:共享SQL语句(使用占位符)
4:通过索引访问
5:选择最有效率的表名(oracle解析器按照从右到左的顺序处理from后的表名。最后出现的表数据越少效率越快)
如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其他表所引用的表。
6:WHERE子句中的连接顺序(oracle采用从上至下的方式解析where子句,表之间的链接必须写在其他where条件之前,能过滤掉最大的条件必须写在最后)
7、SELECT子句中避免使用 ‘ * ’
当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用‘*’是一个方便的方法。不幸的是,这是一个非常低效的方法。实际上,ORACLE在解析的过程中,
会将‘*’依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间
minus 返回第二个查询返回的行减去第一个查询返回的行
intersect 返回两个查询共有行
translate('123','123','456')将参数1对应位置字符按照参数2转换成参数3,
不要再索引上使用not,is null,计算
层次查询
start with --层次根
connect by prior--层次关联关系
列:
select empleid,name,managerid
from users
start with empleid=1000
connect by prior empleid=managerid
rollup增加分组统计行
2:减少数据库连接
3:共享SQL语句(使用占位符)
4:通过索引访问
5:选择最有效率的表名(oracle解析器按照从右到左的顺序处理from后的表名。最后出现的表数据越少效率越快)
如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其他表所引用的表。
6:WHERE子句中的连接顺序(oracle采用从上至下的方式解析where子句,表之间的链接必须写在其他where条件之前,能过滤掉最大的条件必须写在最后)
7、SELECT子句中避免使用 ‘ * ’
当你想在SELECT子句中列出所有的COLUMN时,使用动态SQL列引用‘*’是一个方便的方法。不幸的是,这是一个非常低效的方法。实际上,ORACLE在解析的过程中,
会将‘*’依次转换成所有的列名,这个工作是通过查询数据字典完成的,这意味着将耗费更多的时间
minus 返回第二个查询返回的行减去第一个查询返回的行
intersect 返回两个查询共有行
translate('123','123','456')将参数1对应位置字符按照参数2转换成参数3,
不要再索引上使用not,is null,计算
层次查询
start with --层次根
connect by prior--层次关联关系
列:
select empleid,name,managerid
from users
start with empleid=1000
connect by prior empleid=managerid
rollup增加分组统计行