欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据库相关的问题之一

程序员文章站 2022-07-13 09:57:38
...

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;

     

相关标签: 数据库