数据库相关的问题之一

1、数据库优化方面的简单应用

      用PreparedStatement一般来说比Statement性能高:因为一个sql发给服务器去执行,涉及步骤(语法检查,语义分析,编译,缓存)。

      有外键约束会影响插入和删除功能,如果程序能够保证数据的完整性,那在设计数据库时就去掉外键。

      根据mysql扫描的原理,下面的子查询语句要比第二条关联查询的效率高:

      (1) select e.name,e.salary where e.managerid=(select id from employee where name = 'zxx');

      (2) select e.name,e.salary,m.name,m.salary from employee e,employee m where e.managerid=m.id and m.name = 'zxx';

      sql语句全部大小写,特别是列名和表名都大写。特别是sql命令的缓存功能,更加需要统一大小写,sql 语句->发给oracle服务器->语法检查和编译成为内部指令->缓存和执行指令。根据缓存的特点,不要拼揍条件,而是用?和PreparedStatement.还有索引对查询性能的改进也是值得关注的。

2、union和union all有什么不同?

     UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表和历史表UNION。而UNION ALL 只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。

      从效率上说,UNION ALL要比UNION快得多,所以,如果可以确认合并的两个结果集中不包含重复的数据,那么就使用UNION ALL。

3、分页语句

     例如:取出sql表中第31到40的记录(自增主键ID)

     sql server 方案1:select top 10 * from t where id not in(seletc top 30 id from t order by id) order by id.

     sql server 方案2:select top 10 * from t where id not in(seletc top 40 id from t order by id) order by id desc.

      mysql方案:select * from t order by id limit 30,10

      oracle方案:select * from (select rownum r,* from t where r<=40) where r>30;

     

你可能感兴趣的:(数据库)