select * into temp_table from A inner join B on A.id=b.id 创建一个所谓的临时表temp_table,执行一次对事务日志增加不少咯。很容易满,所以这个所谓的临时表。最好不要用。不过写在存储过程中,设置好在某时间自己清理咯。还是可以的。但是在使用完这个东西的时候必须马上删除这个所谓的临时表。drop table temp_table. 感觉这么大的数据在数据库里面做的优化效果不是很明显咯。尤其是很多表。子查询,这样很影响数据库的性能。所以,请各位提示一下在数据库中怎么优化sql,同时在程序里面如果用Ajax是不是可以让浏览者产生错觉,也就是说他能看到数据已经存在,当然作为内行应该知道那数据是一边加载一边显示的。
2.从AP方面入手: 使用缓存,优化缓存.
索引
注意SQL关键字性能不同
如果你是DBA,那么建立索引,视图,存储过程是必须考虑的;
如果你是业务分析人员,那么首先考虑要不要这样处理数据?换一种方式可以么?
我有几个好的建议:
1.使用预编译的SQL类PreparedStatement
2.在数据库连接方面使用JNDI,做一个连接池方便连接
3.SQL语句方面当然需要优化.这要看你使用什么DB了.
4.我是用Oracle,建立索引可提高速度哦.
创建一个所谓的临时表temp_table,执行一次对事务日志增加不少咯。很容易满,所以这个所谓的临时表。最好不要用。不过写在存储过程中,设置好在某时间自己清理咯。还是可以的。但是在使用完这个东西的时候必须马上删除这个所谓的临时表。drop table temp_table. 感觉这么大的数据在数据库里面做的优化效果不是很明显咯。尤其是很多表。子查询,这样很影响数据库的性能。所以,请各位提示一下在数据库中怎么优化sql,同时在程序里面如果用Ajax是不是可以让浏览者产生错觉,也就是说他能看到数据已经存在,当然作为内行应该知道那数据是一边加载一边显示的。
但是现在我不打算这么做,我打算用程序解决这个问题。AJAX加临时表。我试试咯。DATATABLE 活着用DATASET试试。。最郁闷的是他要生成树形,还要递归,我能快起来吗?郁闷
举个例子:
有一个员工表(EmpID,Name),和保险表(ID,Employee,StartDate)。我们要查询在2006年以后(但不包含2006内的)交纳保险的员工信息,一般人都会写
select * from Tab_Employee,Tab_Insurance where EmpID = Employee and StartDate > '2006/1/1'这一个语句看似简单,但是需要优化的地方很多:
1、SQL 语句 要大写,这样系统能够更快的处理语句
2、尽量少使用 * ,如果要查询所有的字段,如果使用* 的话,系统会先检索 Tab_Employee里面会有多少字段,然后再去查询,另外,涉及到多个表查询的时候采用 [表名].[字段名]的方式,及时几个表没有冲突字段,但是系统在执行时候仍需要去处理。
3、我们要查询的为2006以后但不包含2006,这样的话,可以写成 StartDate >= '2007/1/1',为什么要这样写呢?原因是:前一句系统会以2006为标准进行对比查询,而后者是以2007为标准进行查询的。可以想象假如你有100万条数据,其中有80万是小于2007的,系统查询会多浪费多少时间。
4、合理使用索引。如果是几个表的管理,尽量使用索引,这样系统在查询的时候只需要查询索引就可以了,而不是查询全表。这样能够节省非常多的时间。
5、涉及到子查询的情况,一定要对子查询进行优化,把最少数据结果返回给上级查询。平时尽量不要使用子查询,因为子查询基本可以使用表的关联查询代替,因为表之间的关联查询一般要比子查询的效果要高。
这是个人的一点经验之谈,之前给公司的ERP服务器做优化(用友U8),帐套数据10G了,数据查询非常慢,自己把用友里面的一些涉及到物料查询的子查询修改后,执行时间仅有以前的40%。在论坛内给你找了个帖子,希望楼主好好学习一下。
http://topic.csdn.net/u/20080808/14/dfc973e7-fcf2-4526-9de1-fa5efc148f5c.html