列索引(快) ——》全局索引 (慢)
劣质sql及修改 :1> where 子句中使用了 is null | is not null
(oracle不允许使用索引)
2> where 子句前置通配符不能使用索引,降低查询速度
3> order by 子句使用表达式
4> NOT 使用单一的not 或 column <> parameter 不能使用索引
应替换成 column<='parameter' or column>=parameter 就可以使用当前字段索引
5> EXISTS 相比于IN的效率高 (遍历主表,主表通过关联子表的列名的值过滤信息)
同样NOT EXISTS 比NOT IN 的效率高
6> from 后查询两个表的时候 , 数据少的作为基础表 ,即 from tab1 tab2 base_tabs
后查询3个表的时候,选择交叉表作为基础(被其他表引用的表,即关联其他两张表的)
7> where 子句连接顺序 自上而下 所以最大数据量条件的应至于where句末
8> * 避免在select后面使用*,oracle会查数据字典获取所有列名
9> 减少访问数据库次数 尽量使用decode函数方法 (相当于一条if)
decode可以结合order by 和group by 使用
10> 删除重复记录方法
delete from emp e where e.rowid >(select min(x.rowid) from rmp x where x.emp_no = e.emp_no)
11> 多使用commit释放资源
12> 计算记录条数,count(index) > count(*) > count(1) 无显著速度差异
13> 减少对表的查询 (a,b)= (select a1,b1 from emp)
14> 使用别名减少解析时间
15> 采用表连接 效率高于 exists
16> 使用in和union all替换or
17> where后 order by 大数据范围滞后,小数据范围在前。
18> 索引只能确定存在于表中
19> ||连接字符串也将不实用索引
20> 优化group by 在执行此命令之前,将不需要的记录过滤掉
21> 表空间和索引至于不同的硬盘上
劣质sql及修改 :1> where 子句中使用了 is null | is not null
(oracle不允许使用索引)
2> where 子句前置通配符不能使用索引,降低查询速度
3> order by 子句使用表达式
4> NOT 使用单一的not 或 column <> parameter 不能使用索引
应替换成 column<='parameter' or column>=parameter 就可以使用当前字段索引
5> EXISTS 相比于IN的效率高 (遍历主表,主表通过关联子表的列名的值过滤信息)
同样NOT EXISTS 比NOT IN 的效率高
6> from 后查询两个表的时候 , 数据少的作为基础表 ,即 from tab1 tab2 base_tabs
后查询3个表的时候,选择交叉表作为基础(被其他表引用的表,即关联其他两张表的)
7> where 子句连接顺序 自上而下 所以最大数据量条件的应至于where句末
8> * 避免在select后面使用*,oracle会查数据字典获取所有列名
9> 减少访问数据库次数 尽量使用decode函数方法 (相当于一条if)
decode可以结合order by 和group by 使用
10> 删除重复记录方法
delete from emp e where e.rowid >(select min(x.rowid) from rmp x where x.emp_no = e.emp_no)
11> 多使用commit释放资源
12> 计算记录条数,count(index) > count(*) > count(1) 无显著速度差异
13> 减少对表的查询 (a,b)= (select a1,b1 from emp)
14> 使用别名减少解析时间
15> 采用表连接 效率高于 exists
16> 使用in和union all替换or
17> where后 order by 大数据范围滞后,小数据范围在前。
18> 索引只能确定存在于表中
19> ||连接字符串也将不实用索引
20> 优化group by 在执行此命令之前,将不需要的记录过滤掉
21> 表空间和索引至于不同的硬盘上