我数据库里面数据有100万,我查询出来怎么加快他的速度,前提是不是在一个表里面,有不同的表提供内容,4个表。请问大侠怎么实现它的速度加快。

解决方案 »

  1.   

    1.从DB方面入手: 优化SQL语句,建立索引,优化索引,升级硬件.
    2.从AP方面入手: 使用缓存,优化缓存.
      

  2.   

    建立索引,优化sql语句,只提取部分数据
      

  3.   

    如果只是查询,提倡部分读取和建立本地缓存数据库端应该建视图(最好是物理化视图),索引,优化一下sql,大表尽量分区
      

  4.   

    肯定的分页 要不datatable都会内存溢出 
      

  5.   

    视图
    索引
    注意SQL关键字性能不同
      

  6.   

    1.支持2樓觀點2.建立視圖是不可取的,視圖要轉化成相應SQL才執行,這個過程是需要時間的
      

  7.   

    如果你不是DBA,首先考虑缓存结果到内存中,然后再考虑从内存中连接多个对象的数据;
    如果你是DBA,那么建立索引,视图,存储过程是必须考虑的;
    如果你是业务分析人员,那么首先考虑要不要这样处理数据?换一种方式可以么?
      

  8.   

    首先:数据量大不是查询速度慢的原因,
    我有几个好的建议:
    1.使用预编译的SQL类PreparedStatement 
    2.在数据库连接方面使用JNDI,做一个连接池方便连接
    3.SQL语句方面当然需要优化.这要看你使用什么DB了.
    4.我是用Oracle,建立索引可提高速度哦.
      

  9.   

    首先谢谢各位关注我的问题,你们说说的这些我都考虑到了,建索引、视图、临时表、这些我都考虑了,但是真正做了的就是做了一个临时表,我昨天才发现数据库的数据是1000多万,我昨天做了一个临时表第一次出来100万条数据需要10秒,到后面几次就会超时。事务日志空间一下就满了。所以会超时。我现在打算用ajax来处理。利用他的原理,第一次应该慢些,到后面的话应该会看不出他慢。本来我是打算建一个视图,然后再在视图里面建索引。各位给点意见咯。
      

  10.   

    select * into temp_table from A inner join B  on A.id=b.id
    创建一个所谓的临时表temp_table,执行一次对事务日志增加不少咯。很容易满,所以这个所谓的临时表。最好不要用。不过写在存储过程中,设置好在某时间自己清理咯。还是可以的。但是在使用完这个东西的时候必须马上删除这个所谓的临时表。drop table temp_table. 感觉这么大的数据在数据库里面做的优化效果不是很明显咯。尤其是很多表。子查询,这样很影响数据库的性能。所以,请各位提示一下在数据库中怎么优化sql,同时在程序里面如果用Ajax是不是可以让浏览者产生错觉,也就是说他能看到数据已经存在,当然作为内行应该知道那数据是一边加载一边显示的。
      

  11.   

    对于,你们的回答,不知道是逗我开心还是怎么的,至少我感觉对我没有用咯。那位大侠过来帮帮我咯。不管是从程序的角度来讲还是从SQL优化。先谢谢了。
      

  12.   

    那我不如创建一个临时表呢?然后根据它的特征,在创建一个索引。这样不是更快些!
    但是现在我不打算这么做,我打算用程序解决这个问题。AJAX加临时表。我试试咯。DATATABLE 活着用DATASET试试。。最郁闷的是他要生成树形,还要递归,我能快起来吗?郁闷
      

  13.   

    100W数据导入到dataset不到1分钟吧。之前我搞过,对100W数据做了相邻的比较,大概5分钟就搞定了。
      

  14.   

    http://www.cnblogs.com/wypmke/articles/1839492.html
      

  15.   

    100万条数据的话尽量使用存储过程,并且Sql语句和索引都要合理优化。
    举个例子:
    有一个员工表(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