小弟最近遇到一个头痛问题,还请高人指点。有一个数据量超大的表table1,大约1亿条数据,并且位于链接数据库中
如果用
方式一
select 列A,列B,列C 
from table1
where 列A in ('值1')
的方式查询需要3秒钟方式二
如果把'值1'放到一个临时表TEMPTABLE中,也就是表中只有这么一个记录,再查询
select 列A,列B,列C from table1
where 列A in(
select 列1 from TEMPTABLE)
至少几分钟内出不来,停止查询都不容易问题是这个'值1'也是查询得出的,总不能先生成类似方式一的语句再执行吧,那样好像比较笨,join的方法也试过了,不行
有没有提高速度的好办法 啊?

解决方案 »

  1.   

    数据量大,也没什么办法了。只能试着优化。得到最好的结论。
    就是建INDEX还花费时间呢,只能比较着来写语句了
      

  2.   

    索引很重要。
    另外,可以试试 exec() 把用方法1生成的查询放到里面,看看速度如何。
    临时表能避免就最好不用。
      

  3.   

    1、索引很重要
    2、数据量大,也没什么办法了。只能试着优化,进行数据分表
    3、数据量很大的情况,最好不要用临时表
    4、你的应用可以通过分布查询,提高效率
       先查出 值1 ,然后用 方法一 进行查询 
      分解大查询为几个小查询,动态组合SQL,并不是笨办法,对大数据量查询来说,有时候这种方法反而是最快的
      

  4.   

    select   列A,列B,列C   from   table1 
    where   列A   in( 
    select   列1   from   TEMPTABLE) 
    这种主要是临时表的问题,在执行时,对TEMPTABLE进行了全表扫描和排序,这两项用了较多资源;而第一种是直接查找的结果,所以快;用连接时,比IN要快。如果列有索引的话最好。